如何使用asm intel语法从c中的asm访问char?

时间:2016-08-26 02:16:41

标签: c++ c assembly

休闲程序必须打印3,但是' buff'从asm看不到。

#include <stdio.h>

char buff[] = "%d\n";

int main (void)
{
    asm("mov eax, 3");
    asm("mov esi,eax");
    asm("mov edi,buff");
    asm("mov eax, 0");
    asm("call printf");
   return 0;
}

我尝试使用asm intel语法。 它编译为:gcc -masm=intel -o test2 test2.c

该行

asm("mov edi,buff");

错了,我怎么在这里写buff呢?我试过[buff]但是没有用。谢谢你

**更新:

下一个程序可行,但是正在使用AT&amp; T语法:

#include <stdio.h>

char Format[] = "%d\n";

int main (void)
{
   asm
   (
      // Make stack space for arguments to printf
      "movl $3, %eax\n"
      "movl %eax, %esi\n"
      "movl $Format, %edi\n"
      "movl $0, %eax\n"
      "call printf\n"

   );
   return 0;
}  //compile with gcc -o test2 test2.c

我尝试使用intel语法做同样的事情,但我不知道如何从asm corectly访问全局变量

1 个答案:

答案 0 :(得分:0)

正如@Peter Cordes对我说的那样,我在https://stackoverflow.com/tags/x86/info读到有关OFFSET关键字的信息,现在它可以正常工作了。 我知道问题是我在注册表中放了一个数据,而不是一个地址,看起来像OFFSET关键字是我正在搜索的。

Wrorking是:

#include <stdio.h>

char buff[] = "%d\n";

int main (void)
{
    asm("mov eax, 3");
    asm("mov esi,eax");
    asm("mov edi,OFFSET buff");
    asm("mov eax, 0");
    asm("call printf");
   return 0;
}