0

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

1 回答 1

6

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

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

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

查看参考以获取有关您正在使用的服务的更多信息。

于 2012-09-13T15:11:28.600 回答