即时尝试此代码,但我无法按字母顺序对角打印..你能帮我这个代码吗? program output screenshot
.model small
.stack
.code
start:
mov cx,26
mov bh,00
mov ah,02h
mov dl,41h
mov dh,02h
again:
int 10h
int 21h
inc dl
inc dh
loop again
mov ah,4ch
int 21h
end start
答案 0 :(得分:1)
此代码的所有问题都源于BIOS功能02h(SetCursor)和DOS功能02h(WriteCharacter)都使用DL
寄存器作为参数。不幸的是,在这种情况下,意义是不同的。有几种解决方案。 Ped7g建议使用免费注册BL
来保留单独的字符代码。
我提出的一个简单的解决方案是根本不使用DOS输出功能,并使用BIOS功能0Eh(TeletypeCharacter)写入显示器。此函数不依赖DL
作为参数。它使用AL
寄存器。
.model small
.stack
.code
start:
mov al, "A" <<<First character
mov bh, 0 <<<Display page 0
mov cx, 25 <<<Iteration count
mov dl, 0 <<<Start at column 0
mov dh, 0 <<<Start at row 0
again:
mov ah, 02h <<<BIOS function SetCursor
int 10h
mov ah, 0Eh <<<BIOS function TeleType
int 10h
inc dl <<<Next column
inc dh <<<Next row
inc al <<<Next character
loop again
mov ah, 4Ch
int 21h
end start
在标准文本屏幕上工作时,有80列和25行。你不应该把光标放在屏幕外!因此,程序应该执行的迭代次数最多为25次。