2016-11-18 35 views
1

即时通讯尝试此代码,但我不能完美打印对角字母顺序..你能帮我这个代码? program output screenshot如何使用MASM打印字母字母diagonaly?

.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

单击程序输出屏幕截图查看代码的输出。 – Rhye

+0

'int 10h/ah = 02h'使用'dl'作为光标的水平位置。 – Michael

+0

我应该做什么改变? – Rhye

回答

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.