2012-05-08 23 views
0

代碼如下:一個宏可以用於內聯asm嗎?

\#define CS 0x18 

asm ("pushl CS" 
    ); 

或東西作爲輸入參數:

asm("pushl %0 \n\t" 

    :"m"(CS) \ 

    ) 

可以將宏CS在上述內聯彙編代碼中使用?

+0

如果你談論緊靠GNU工具鏈裏面然後是 - 發生了什麼事讓你認爲你不能? –

+1

只有後者纔有效。這可能對每個人都不明顯 – hirschhornsalz

+0

@PaulR:我不熟悉asm,你的意思是說上面的兩種形式都對嗎? –

回答

2

CS可以在第二個例子中使用,而不是第一個。

宏在編譯器/彙編程序工作之前被替換,所以它們工作,不管C或彙編。
但是宏不在字符串中擴展,所以第一個示例不起作用。

如果你想第一個例子中工作,使用stringization:

#define STR1(x) #x 
#define STR(x) STR1(x) 
asm ("pushl " STR(CS)); 

這擴大STR(CS)"0x18""pushl "串接它。

-1

或建立一個x86的彙編

call macro1 ;from anywhere in asm code 


.macro1 
do stuff 
ret