如何在内联gcc汇编程序(linux)中传递变量地址

时间:2016-06-20 15:05:18

标签: gcc inline-assembly

我在gcc中使用内联汇编程序(在Linux下)。 我写了这个简单的程序:

           char *str="hello world";

           int main(int argc, char *argv[]
          {
            ...
                asm("mov %0,  %%rcx" 
                       : 
                       : "g" (str));
            ...
          }

我使用这种奇怪的语法在rcx寄存器中写入字符串的地址。 但是当我反汇编二进制文件时,我发现数据首先在rax中传输,然后在rcx中传输。你可以想象,这可以在我的程序中引入一些bord效果...... 当我年轻的时候,我曾经写过类似的东西:

          asm("mov _str, rcx")

但它在Linux gcc上不起作用......为什么?

1 个答案:

答案 0 :(得分:-1)

          char *str="hello world";
...
          asm("mov _str, rcx")
     

但它在Linux gcc上不起作用......为什么?

gcc的错误消息应该说明原因。最可能的原因是

  • 必须在全局变量名称
  • 之前添加下划线
  • 百分号必须添加到注册名称
  • 之前

asm("mov str, %cx")这样的东西。