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

时间:2012-09-13 14:49:09

标签: assembly x86

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

1 个答案:

答案 0 :(得分:5)

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

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

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

检查this参考,了解有关您正在使用的服务的更多信息。