相关疑难解决方法(0)

为什么32位寄存器上的x86-64指令归零整个64位寄存器的上半部分?

在x86-64 Tour of Intel Manuals中,我读到了

也许最令人惊讶的事实是,诸如MOV EAX, EBX自动将指令的高32位归零的指令RAX.

同一来源引用的英特尔文档(3.4.1.1 64位手动基本架构中的通用寄存器)告诉我们:

  • 64位操作数在目标通用寄存器中生成64位结果.
  • 32位操作数生成32位结果,在目标通用寄存器中零扩展为64位结果.
  • 8位和16位操作数生成8位或16位结果.目标通用寄存器的高56位或48位(分别)不会被操作修改.如果8位或16位操作的结果用于64位地址计算,则将寄存器显式符号扩展为完整的64位.

在x86-32和x86-64汇编中,16位指令如

mov ax, bx
Run Code Online (Sandbox Code Playgroud)

不要表现出这种"奇怪"的行为,即eax的上层词被归零.

因此:引入这种行为的原因是什么?乍一看似乎不合逻辑(但原因可能是我习惯了x86-32汇编的怪癖).

x86 assembly x86-64 cpu-registers zero-extension

97
推荐指数
3
解决办法
2万
查看次数

x86_64寄存器rax/eax/ax/al覆盖完整寄存器内容

正如广泛宣传的那样,现代x86_64处理器具有64位寄存器,可以以向后兼容的方式用作32位寄存器,16位寄存器甚至8位寄存器,例如:

0x1122334455667788
  ================ rax (64 bits)
          ======== eax (32 bits)
              ====  ax (16 bits)
              ==    ah (8 bits)
                ==  al (8 bits)
Run Code Online (Sandbox Code Playgroud)

这样的方案可以从字面上理解,即,总是可以使用指定的名称仅访问寄存器的一部分用于读取或写入目的,并且这将是高度逻辑的.实际上,对于高达32位的所有内容都是如此:

mov  eax, 0x11112222 ; eax = 0x11112222
mov  ax, 0x3333      ; eax = 0x11113333 (works, only low 16 bits changed)
mov  al, 0x44        ; eax = 0x11113344 (works, only low 8 bits changed)
mov  ah, 0x55        ; eax = 0x11115544 (works, only high 8 bits changed)
xor  ah, ah          ; eax = 0x11110044 (works, only high 8 …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 cpu-registers zero-extension

70
推荐指数
1
解决办法
5万
查看次数

英特尔32位和64位寄存器的名称中E和R前缀代表什么?

32位寄存器名称以E开头,64位寄存器以R开头.E和R代表什么?是否有理由选择这些字母?

此外,在64位寄存器中,我们也可以在任何低级调试器(如Windbg)中看到,最右边的位仍然用与64位寄存器相同的名称引用,除了名称以E.例如,64位系统中RAX寄存器的最右边32位称为EAX.

那么,E和R代表什么?而且,为什么后缀X用于注册?

64-bit x86 assembly x86-64 cpu-registers

13
推荐指数
1
解决办法
3294
查看次数

“REX”在 x86-64 REX 前缀中代表什么?

从Intel 的 SDM 中,第 2.2.1 节指定 REX 前缀用于:

  • 指定 GPR 和 SSE 寄存器。
  • 指定 64 位操作数大小。
  • 指定扩展控制寄存器

但是首字母缩略词中的字母 REX 代表什么?

x86 assembly x86-64 intel machine-code

6
推荐指数
1
解决办法
656
查看次数

RSP中的R代表什么?

寄存器根据其位架构被相应地调用: 16 位:SP = 堆栈指针 32 位:ESP = 扩展堆栈指针 64 位:RSP = R? 堆栈指针

有谁知道R代表什么?我在 stackoverflow 上找到了一个答案,表明 R 代表注册,但没有证据证明,这只是用户的猜测。

x86 assembly x86-64 cpu-architecture cpu-registers

3
推荐指数
1
解决办法
2634
查看次数

RAX寄存器的名称是什么?

我知道EAX本质上是扩展AX寄存器,但是什么是RAX寄存器?我的计算机架构教授很难过,我无法在任何地方找到答案.

architecture assembly x86-64

2
推荐指数
1
解决办法
4822
查看次数