"%寄存器"之间的差异和#34;(%注册)"在x86汇编AT& T语法?

时间:2017-10-11 03:59:25

标签: assembly x86 att

到目前为止,我目前的理解是: movq %rdi, %rax会将值从注册表%rdi移至注册表%rax

movq (%rdi), %rax会将值从(%rdi)的内存移动到寄存器%rax

但是,我无法理解这实际上在功能上意味着什么。在这种情况下,这两条装配线会以不同的结果结束吗?

1 个答案:

答案 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,但这不是重点。