at& t mov命令,价值或地址写在命运?

时间:2013-06-11 22:24:15

标签: assembly

有很多变种如何使用移动,但是用什么来写?

mov %ecx,0x8(%edi)
  1. %ecx中的值与地址0x8(%edi)或%ecx中的地址进行堆叠 堆栈的地址为0x8(%edi)?
  2. 有一个指向a的寄存器 每次堆叠位置?
  3. 是(%edi)与之间的差异 %edi,%edi是地址和(%edi)此地址的值吗?

1 个答案:

答案 0 :(得分:1)

问题1:价值或地址?我对你的意思感到困惑,所以我只会解释mov %ecx, 0x8(%edi)的作用。 ecx中的值将存储在内存位置 [edi + 8]中。因此,如果ecx保持值42,则在执行此命令后,您将在内存中的[edi + 8]处看到值42。此代码的C等效项为:*(((char*) edi) + 8) = ecx;

问题2:寄存器可以在堆栈中保留一个位置,但它没有。它可以容纳任何适合它的东西,无论是几个字符,整数,指针等等。

问题3: mov (%edi), eax正在移动内存位置edi的值。您解除引用 edi。等效的C代码为eax = *edimov %edi, eax正在移动edi中的值。等效的C代码为eax = edi

注意:请查看Ol'Wumpus对我未提及的一些重要信息的评论。