低位寄存器和高位寄存器的区别
Difference between low and high bit registers
"AH-DH"
高位 AH、BH、CH 和 DH 寄存器。
"AL-DL"
低位 AL、BL、CL 和 DL 寄存器。
引用自AMD64 volume 1,我在intel的程序员手册上也看到了
我不太清楚这是什么意思。
它与字节顺序有什么关系吗?由于amd和intel微处理器都是小端顺序。
是否可以解释为:
啊: 0 0 0 0 0 0 1 0
从第一位读取所以它 returns: 2 (in decimal)
但是
中的值相同
阿尔:0 0 0 0 0 0 1 0
从末尾开始读取 returns: 64 (in decimal)
AH 是AX 的大半,AL 是小半,B、C、D 寄存器也是如此。因为我们直接指定高位或低位,而不是只要求先到先得,所以字节顺序并没有真正发挥作用。
AX = 0x288
________|________
/ \
0000 0010 1000 1000
\_______/ \_______/
AH=0x2 AL=0x88
引用自(preface, page xxvii). The registers go all the way back to the 8086,他们的行为还是和当年一样。
16 位寄存器 AX
、BX
、DX
、CX
的内容也可以使用 8 位访问器访问。特别是,如果
AX = 0x1234
然后
AH = 0x12
AL = 0x34
因此 "high" 和 "low" 位寄存器。这些访问器存在的主要原因是为了减少指令长度。如果您只需要存储一个 8 位值,则必须将完整的 16 位编码到一条指令中是一种浪费。
然而,对于 32 位和 64 位寄存器,只有较低的部分可以通过显式寄存器名称访问。
例如,AX
是EAX
的下半部分,EAX
是(64位)RAX
的下半部分。
"AH-DH"
高位 AH、BH、CH 和 DH 寄存器。
"AL-DL"
低位 AL、BL、CL 和 DL 寄存器。
引用自AMD64 volume 1,我在intel的程序员手册上也看到了
我不太清楚这是什么意思。
它与字节顺序有什么关系吗?由于amd和intel微处理器都是小端顺序。
是否可以解释为:
啊: 0 0 0 0 0 0 1 0
从第一位读取所以它 returns: 2 (in decimal)
但是
中的值相同
阿尔:0 0 0 0 0 0 1 0
从末尾开始读取 returns: 64 (in decimal)
AH 是AX 的大半,AL 是小半,B、C、D 寄存器也是如此。因为我们直接指定高位或低位,而不是只要求先到先得,所以字节顺序并没有真正发挥作用。
AX = 0x288
________|________
/ \
0000 0010 1000 1000
\_______/ \_______/
AH=0x2 AL=0x88
引用自(preface, page xxvii). The registers go all the way back to the 8086,他们的行为还是和当年一样。
16 位寄存器 AX
、BX
、DX
、CX
的内容也可以使用 8 位访问器访问。特别是,如果
AX = 0x1234
然后
AH = 0x12
AL = 0x34
因此 "high" 和 "low" 位寄存器。这些访问器存在的主要原因是为了减少指令长度。如果您只需要存储一个 8 位值,则必须将完整的 16 位编码到一条指令中是一种浪费。
然而,对于 32 位和 64 位寄存器,只有较低的部分可以通过显式寄存器名称访问。
例如,AX
是EAX
的下半部分,EAX
是(64位)RAX
的下半部分。