2016-11-18 34 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.