0

アセンブリで 2 つの数値の合計を出力したい。コードを実行すると、コンパイラに次のメッセージが表示されます。

INT 21h、AH=020h - まだサポートされていません。サポートされている割り込みのリストを参照してください。

コードでこのエラーが発生するのはなぜですか? どの割り込みコードを使用すればよいですか?

.MODEL SMALL
.STACK 100H
.DATA
A DW 5H
B DW 2H
SUM DW ?
.CODE
MAIN PROC
MOV AX,@DATA
MOV AX,A
ADD AX,B
MOV SUM,AX
INT 21H

MAIN ENDP
END MAIN
4

1 に答える 1

4

MSDOS 割り込みを呼び出す前に、使用する MSDOS 関数コードを AH にロードする必要があります。

たとえば、ASCII 文字を印刷するには、

; assuming AL already contains ASCII character to print
MOV AH, 07H
INT 21H

有効な機能コードを AH にロードしていません。コンパイラがどこで 20H を取得したかは謎ですが、@DATA を何もせずに AX にロードしているため (DS の設定など)、起動時に正しいデータ セグメントを指していないのではないかと思います。

また、MSDOS は数値から文字列への変換を提供していないため、表示したい場合は自分で値を変換する必要があることに注意してください。文字列を出力する関数コードは AH=09H で、DS:SI は '$' で区切られた文字列 (null で終了していない!) を指していると思います。ただし、最初にそれを確認することをお勧めします。

base-16 で印刷したい場合は、各 4 ビット セクションをその 16 進数に対応する印刷可能な ASCII 文字に変換し、関数 07H を使用して文字を印刷することができますが、最上位から始めることを忘れないでください。 4ビットであり、割り込み呼び出しを設定するときに残りの値を破棄するため、4ビット部分ごとに合計から値をリロードする必要があります。

于 2016-04-27T21:58:54.753 に答える