Assembly al和r8b之间的英特尔汇编差异
我想知道AL和R8B之间的主要区别是什么 据我所知,AL表示RAX的8个最低位,R8B表示R8的8个最低位Assembly al和r8b之间的英特尔汇编差异,assembly,x86-64,intel,cpu-registers,Assembly,X86 64,Intel,Cpu Registers,我想知道AL和R8B之间的主要区别是什么 据我所知,AL表示RAX的8个最低位,R8B表示R8的8个最低位 但是我的程序的最终输出是不一样的(当使用R8B时,它实际上不起作用),但两者似乎都有相同的用途。它们是不同的寄存器。RAX可以“翻译”为R0。所以艾尔是R0B。但由于历史原因,名称为RAX,低8位为AL。存在差异。使用r8b意味着REX.R或REX.B,并且使用任何REX前缀都意味着不能在同一指令中使用ah、ch、dh或bh(用于它们的编码将分别表示spl、bpl、sil和dil)。例如,
但是我的程序的最终输出是不一样的(当使用R8B时,它实际上不起作用),但两者似乎都有相同的用途。它们是不同的寄存器。RAX可以“翻译”为R0。所以艾尔是R0B。但由于历史原因,名称为RAX,低8位为AL。存在差异。使用
r8b
意味着REX.R或REX.B,并且使用任何REX前缀都意味着不能在同一指令中使用ah
、ch
、dh
或bh
(用于它们的编码将分别表示spl
、bpl
、sil
和dil
)。例如,这是可编码的:
add al, ah
add r8b, ah
但这是不可编码的:
add al, ah
add r8b, ah
所以它们不是完全可以互换的。实际上
rax
是r0
不是r1
@Jester确实-我们从0开始计算-谢谢。你的程序是什么样子的?RAX和R8之间的另一个区别是RAX用作返回值寄存器。因此,如果使用AL,可能会破坏返回值。