AL与DL或AX与DX之间的关系

shr*_*tom 0 x86 assembly

我只是对al和dl的关系感到好奇,因为当我输入一个字符后,我会在打印另一个字符后打印它,al的值突然改变了.以下是示例代码.谢谢!

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
Run Code Online (Sandbox Code Playgroud)

输出应该像:

(char)&(char)
Run Code Online (Sandbox Code Playgroud)

但出现的是:

(char)&&
Run Code Online (Sandbox Code Playgroud)

gus*_*bro 5

您的问题是中断服务21h的功能02h在AL中返回最后打印字符的ASCII码.

在您的情况下,当您请求INT 21h的服务02h打印'&'时,注册AL将被ASCII代码'&'覆盖.

mov cl, al如果您打算在之后使用该值,则应在调用INT 21h的服务02h之前将AL的内容备份到另一个寄存器(例如).

有关您正在使用的服务的更多信息,请查看参考.