如何使用 MASM 打印字母对角线?

How can i print alphabetical letters diagonaly using 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

这段代码的所有问题都源于 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。