汇编语言语句的含义

时间:2011-05-15 10:50:44

标签: assembly

有汇编语言命令:

add dl, 48d

这种汇编语言陈述的确切目的和含义是什么?当我写代码

mov al, 02
mov dl, al
mov ah, 02
int 21h

它将输出设为b。但是当我写作时,

mov al, 02
mov dl, al
add dl, 48d
mov ah, 02
int 21h

它提供2作为输出。这句话究竟在做什么?

2 个答案:

答案 0 :(得分:4)

看起来像x86汇编程序。此命令将(48十进制)添加到(E)DX寄存器的低8位的内容中。请参阅x86 general purpose registers,但有关实际说明,请参阅x86 Wikipedia page, section "x86 registers"

在x86上,您可以访问寄存器的某些部分。从历史上看,这样做是为了使8086(16位寄存器)与8080(8位寄存器)尽可能兼容。然后,该方案在带有32位寄存器的80286/80386上进行了扩展,然后在AMD x64模式下再次扩展到64位。

因此,您可以将整个32位寄存器作为EDX(处于保护模式时)访问,将较低的16位寄存器作为DX访问。现在这个16位部分(DX)进一步分为两部分:高8位作为DH访问,低8位作为DL。

编辑问题后进行编辑:

让我们从后到前解释引用的代码:最后,调用中断21hex,在IBM PC兼容系统上负责various DOS API calls。将8位寄存器AH设置为2会导致执行字符输出。输出的字符位于8位寄存器DL中。

所以在你的第一个例子中打印了ASCII character 02,但这是一个控制字符,所以输出不应该是b,因为你声明它是不可见的(02是文本开头)。第二个例子取2,然后加48,得到50(十进制)。这是角色2的ASCII码。

我的上帝,我现在感觉很老了... 20年前我已经做过那些事了。

答案 1 :(得分:0)

这很简单。它将8位(十进制)加到8位寄存器DL