到目前为止,我目前的理解是这样的:
movq %rdi, %rax将值从寄存器移动%rdi到寄存器%rax
并将movq (%rdi), %rax值从内存移动(%rdi)到寄存器%rax
但是,我无法理解这在功能上的实际含义。在什么情况下这两条装配线会产生不同的结果?
每次地址 (%rdi) 处的内存不包含自己的地址时,都会产生不同的结果。换句话说,几乎总是如此。如果不是,这只是巧合或非常不寻常的代码的结果。
一些 C 来演示等效问题“两个 printf 语句何时打印相同的结果?”
#include <stdio.h>
int main()
{
int a,*p;
int b=5;
p=&b;
a=*p;
printf("%d\n", a);
a=(int)p;
printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
是的,这会产生警告cast from pointer to integer of different size,但这不是重点。