2016-11-18 4 views
1

私はこのコードを試していますが、私はアルファベット順に対角線で完全に印刷できませんでした。あなたはこのコードに助けてくれますか? program output screenshotMASMを使用して対角線上にアルファベット文字を印刷するにはどうすればよいですか?

.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レジスタを使用しているという事実から、このコードの幹を持つすべての問題。不都合なことに、この場合は意味が異なります。いくつかの解決策が存在する。空きレジスタBLを使用して別の文字コードを保存することがPed7gによって提案されました。

私が提示する簡単な解決策は、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です。

関連する問題