到目前为止,我目前的理解是:
movq %rdi, %rax
会将值从注册表%rdi
移至注册表%rax
和movq (%rdi), %rax
会将值从(%rdi)
的内存移动到寄存器%rax
但是,我无法理解这实际上在功能上意味着什么。在这种情况下,这两条装配线会以不同的结果结束吗?
答案 0 :(得分:4)
每次地址(%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);
}
而且,是的,这会产生警告cast from pointer to integer of different size
,但这不是重点。