我只是对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
)。
有关您正在使用的服务的更多信息,请查看此参考资料。