我只是对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)&&
答案 0 :(得分:5)
你的问题是中断服务21h的功能02h在AL中返回最后一个打印字符的ASCII码。
在您的情况下,当您请求INT 21h的服务02h打印'&'时,注册AL将被ASCII代码'&'覆盖。
如果您打算在之后使用该值,则应在调用INT 21h的服务02h之前将AL的内容备份到另一个寄存器(例如mov cl, al
)。
检查this参考,了解有关您正在使用的服务的更多信息。