这个美元符号在__asm中意味着什么?

时间:2011-03-20 05:44:50

标签: c assembly

我尝试使用谷歌搜索,但我找不到足够的信息来理解我的信息。

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\
  ");

为什么有些人需要$而其他人(例如i)没有$个符号?

3 个答案:

答案 0 :(得分:2)

$1是常数

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

$在前面有前缀并且具有直接价值。 msg1和msg1是两个数组的地址。所以它们的前缀是$

i是一个c变量。使用memory access(间接引用)访问哪个。

选中reference

答案 1 :(得分:1)

Constants需要以"$"为前缀。

movl $msg1, %eax\n\

美元符号意味着一个常数,$msg1也是如此。这里的常量是msg1的地址。

答案 2 :(得分:0)

$这里和&在C / C ++中意为地址