低位和高位寄存器之间的差异

时间:2017-02-24 21:58:19

标签: x86 cpu-architecture cpu-registers

" AH-DH"
高位AH,BH,CH和DH寄存器 " AL-DL"
低位AL,BL,CL和DL寄存器。

它引自AMD64第1卷,我在Intels程序员手册中也看到了这一点。
我不清楚它是什么意思。 它与字节顺序有什么关系吗?因为amd和intel微处理器都是小端序。

可以解释为:
AH:0 0 0 0 0 0 1 0
从第一位读取,使其返回:2(十进制)
但是相同的价值 AL:0 0 0 0 0 0 1 0
从末尾读取并返回:64(十进制)

2 个答案:

答案 0 :(得分:3)

AH是AX的较大一半,AL是较小的一半,类似于B,C和D寄存器。因为我们直接指定高阶位或低阶位,而不仅仅是要求先发生什么,所以endianness并没有真正发挥作用。

         AX = 0x288
 ________|________
/                 \
0000 0010 1000 1000
\_______/ \_______/
 AH=0x2    AL=0x88

答案 1 :(得分:2)

引用来自(preface, page xxvii)。寄存器一直追溯to the 8086,它们的行为仍然与当时相同。

还可以使用8位访问器访问16位寄存器AXBXDXCX的内容。特别是,如果

AX = 0x1234

然后

AH = 0x12
AL = 0x34

因此"高"和"低"位寄存器。这些访问器存在的主要原因是减少指令长度。如果您只需要存储一个8位值,则必须将完整的16位编码为指令是浪费的。

但是,对于32位和64位寄存器,只有下部可以通过显式寄存器名访问。

例如,AXEAX的下半部分,EAX是(64位)RAX的下半部分。