1

我明天有一个考试,我对这个问题感到非常困惑。执行每条指令后,AL 和 AH 寄存器中包含的值是什么。在执行每条指令之前假设 AL=9 和 AH=0。

• nop(没有操作它们保持不变)

• mov al,ah (al=0 ah=0)

• push ax(将 ah 和 al 推入堆栈?)

• 十进制

• 添加斧头,257

• 添加 al,251

• shl al,2

我知道当提到 ax 时我会感到困惑的前几个,即添加 ax,257 我应该将 257 添加到 ah 和 al 上吗?只要记住 al 和 ah 在每条指令开始时都设置回 9 和 0

4

2 回答 2

1

AX 是 AH 和 AL 的串联(或者反过来说,AL 是 AX 的低字节,AH 是 AX 的高字节)。因此,在每条指令之前,AX=0009h。

但是,当您的一条指令在 AL 上运行时,它根本不会影响 AH。

于 2012-05-17T16:14:08.973 回答
1

请记住,al 和 ah 只是引用 ax 寄存器的低字节和高字节的方式。对于 AX,最好在出现时将其视为 16 位寄存器,然后当被问及 AH 或 AL 的值是什么时,将其分解为下半部分和上半部分。所以你的寄存器看起来像这样,如果它们从 9 和 0 开始:

 00000000   00001001
|________| |________|
    AH         AL
|___________________|
          AX

所以,例如add ax, 257看起来像这样:

    |0000000|  |00001001|
+
    |0000001|  |00000001|

=   |0000001|  |00001010|
于 2012-05-17T16:24:34.030 回答