如何使用MASM以字母方式打印字母?

时间:2016-11-18 08:23:48

标签: assembly masm

即时尝试此代码,但我无法按字母顺序对角打印..你能帮我这个代码吗? 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

1 个答案:

答案 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次。