Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly al和r8b之间的英特尔汇编差异_Assembly_X86 64_Intel_Cpu Registers - Fatal编程技术网

Assembly al和r8b之间的英特尔汇编差异

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)。例如,

我想知道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
)。例如,这是可编码的:

add al, ah
add r8b, ah
但这是不可编码的:

add al, ah
add r8b, ah

所以它们不是完全可以互换的。

实际上
rax
r0
不是
r1
@Jester确实-我们从0开始计算-谢谢。你的程序是什么样子的?RAX和R8之间的另一个区别是RAX用作返回值寄存器。因此,如果使用AL,可能会破坏返回值。