我试着用谷歌搜索这个,却找不到任何信息足以让我理解。

int i;
char msg1[] = "odd";
char msg2[] = "even";
char *ptr;
__asm__("                   \
    movl i, %eax\n\
        andl $1, %eax\n\
        jz  zero\n\
        movl $msg1, %eax\n\
        jmp done\n\
zero:\n\
        movl $msg2, %eax\n\
done:\n\
        movl %eax, ptr\n\
  ");

为什么有些人需要$而另一个(比如我)没有$符号?

最佳答案

$1是常数1

 `andl $1, %eax` this means do  AND of 1 and EAX register.

$在contants和immediate value前面加前缀。
msg1和msg1是这两个数组的地址。所以它们的前缀太多了。
$是一个c变量。使用i(间接引用)访问。
检查这个reference

07-24 09:46
查看更多