2011-03-20 118 views
4

我尝试了谷歌搜索这一点,我无法找到任何足够的信息,为我的理解。这个美元符号在__asm中意味着什么?

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

为什么一些需要$和其他(如我)没有$标志?

回答

2

$1是恒定一个

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

$前缀盈contants和立即值的。 msg1和msg1是两个阵列的地址。所以它们的前缀为$

i是一个c变量。使用memory access(间接参考)进行访问。

检查此reference

+0

'msg1'也是C变量。为什么它有美元符号? – Gabe 2011-03-20 05:50:58

+0

msg1是一个标签,$ msg1给出了该内存位置的地址。 – Zimbabao 2011-03-20 05:55:32

1

Constants需要以"$"作为前缀。

movl $msg1, %eax\n\ 

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

+0

您正在谈论英特尔语法。以上是AT&T语法。 – Zimbabao 2011-03-20 06:03:59

0

$这里是相同的C/C++ &意地址的