有一个汇编语言命令:
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
作为输出。这个语句到底在做什么?
看起来像 x86 汇编程序。此命令正在将 48 (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 character02 被打印,但这是一个控制字符,因此输出不应该是b
,因为您声明它只是不可见的东西(02 是开始文本)。第二个示例采用 2,然后加上 48,给出 50(十进制)。这是字符2
的 ASCII 代码。
天哪,我现在真的觉得自己老了……我 20 年前就做过这种事。
这很简单。它将 48(十进制)添加到 8 位寄存器DL
。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(84条)