0

文字を入力し、後で特定の別の文字を印刷した後にそれを印刷すると、alの値が突然変化したため、alとdlの関係に興味があります。以下にサンプルコードを示します。ありがとう!

cseg segment para 'code'
assume cs:cseg; ds:cseg; ss:cseg; es:cseg
org 100h
start: jmp begin

begin:  
mov ax, 03h
int 10h

mov ah, 01h
int 21h

mov ah, 02h
mov dl, '&'
int 21h

mov ah, 02h
mov dl, al
int 21h

int 20h
cseg ends
end start

出力は次のようになります。

(char)&(char)

しかし、表示されているのは次のとおりです。

(char)&&
4

1 に答える 1

6

問題は、割り込みサービス21hの関数02hが、最後に印刷された文字のASCIIコードをALで返すことです。

あなたの場合、INT 21hのサービス02hに「&」を出力するように要求すると、レジスタALはASCIIコード「&」で上書きされます。

mov cl, al後でその値を使用する場合は、INT 21hのサービス02hを呼び出す前に、ALの内容を別のレジスタ(たとえば)にバックアップする必要があります。

使用しているサービスの詳細については、このリファレンスを確認してください。

于 2012-09-13T15:11:28.600 に答える