汇编语言:64 位寄存器的 8 位版本?
assembly language: 8 bit versions of 64 bit registers?
所以,假设我正在使用寄存器 %rax
和 %rdi
。
作为一个基本示例,假设 %rax
等同于 0xaaaaaaaaaaaaaaaa
,而 %rdi
等同于 0xbbbbccccddddeeff
。
像 movq %rdi, %rax
这样简单的东西对我来说已经足够简单了。我们只需将 %rdi
中的值移动到 %rax
中。
所以,假设我们有以下内容:
movq %rdi, %rax
movb %dil, %al
第一条指令 %rax
等于 0xbbbbccccddddeeff
。
但我不确定在第二条指令执行后如何确定 %rax
的值,因为我们使用的是 %rdi
和 [ 的 8 位版本=11=]。
我对汇编语言还很陌生,有很多事情让我很困惑。我一直在做很多研究并研究它,但我仍然很迷茫,所以我认为在这里问一个澄清的问题会帮助我。任何有关如何处理此问题的解释将不胜感激!
第二条指令movb %dil, %al
只替换了%rax
的最低8位。其余的保持原样。
因此 %rax
将是 0xbbbbccccddddeeff
,因为最低的 8 位将被复制两次。
如果没有第一条指令 movq %rdi, %rax
- 将整个寄存器复制到 %rax
- 只有最低的 8 位会被替换,%rax
的值会是 0xaaaaaaaaaaaaaaff
.
所以,假设我正在使用寄存器 %rax
和 %rdi
。
作为一个基本示例,假设 %rax
等同于 0xaaaaaaaaaaaaaaaa
,而 %rdi
等同于 0xbbbbccccddddeeff
。
像 movq %rdi, %rax
这样简单的东西对我来说已经足够简单了。我们只需将 %rdi
中的值移动到 %rax
中。
所以,假设我们有以下内容:
movq %rdi, %rax
movb %dil, %al
第一条指令 %rax
等于 0xbbbbccccddddeeff
。
但我不确定在第二条指令执行后如何确定 %rax
的值,因为我们使用的是 %rdi
和 [ 的 8 位版本=11=]。
我对汇编语言还很陌生,有很多事情让我很困惑。我一直在做很多研究并研究它,但我仍然很迷茫,所以我认为在这里问一个澄清的问题会帮助我。任何有关如何处理此问题的解释将不胜感激!
第二条指令movb %dil, %al
只替换了%rax
的最低8位。其余的保持原样。
因此 %rax
将是 0xbbbbccccddddeeff
,因为最低的 8 位将被复制两次。
如果没有第一条指令 movq %rdi, %rax
- 将整个寄存器复制到 %rax
- 只有最低的 8 位会被替换,%rax
的值会是 0xaaaaaaaaaaaaaaff
.