当使用int 21h输出函数时,AL和DL或AX和DX之间的关系



我只是对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

输出应该类似于:

(char)&(char)

但出现的是:

(char)&&

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

在您的情况下,当您请求INT 21h的服务02h打印"&"时,寄存器AL将被ASCII代码"&"覆盖。

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

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

最新更新