注册寻址

时间:2012-05-17 16:08:29

标签: assembly x86

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

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

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

•推斧(将ah和al推到堆栈上?)

•dec ax

•添加ax,257

•添加al,251

•shl al,2

我知道前几个我在提到斧头时感到困惑,即添加斧头,257我应该将257添加到啊和al?只记得al和ah在每条指令的开头都设置回9和0

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

请记住,al和ah只是引用ax寄存器的低位字节和高位字节的方法。使用AX时,最好在出现时将其视为16位寄存器,然后在询问AH或AL的值时将其分解为更低和更高的一半。所以你的寄存器看起来像是这样,如果他们从9和0开始:

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

因此,例如add ax, 257看起来像这样:

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

=   |0000001|  |00001010|
相关问题