当我编译这段代码时
unsigned char A[] = {1, 2, 3, 4};
unsigned int
f (unsigned int x)
{
return A[x];
}
Run Code Online (Sandbox Code Playgroud)
gcc输出
mov edi, edi
movzx eax, BYTE PTR A[rdi]
ret
Run Code Online (Sandbox Code Playgroud)
在x86_64机器上.
问题是:为什么有nop指令(mov edi,edi)?
我正在使用gcc-4.4.4.
在 64 位模式下,mov edi, edi不是无操作。它的作用是将 的前 32 位设置rdi为 0。
这是一般事实的特例,即所有 32 位操作都会在 64 位模式下清除目标寄存器的高 32 位。(与保持不变相比,这允许更高效的 CPU,并且可能也更有用。)
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |