2011-03-20 114 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++ &意地址的