如何使用 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。
我正在尝试这段代码,但我无法按字母顺序完美地对角打印。你能帮我看看这段代码吗? 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。