0
代碼如下:一個宏可以用於內聯asm嗎?
\#define CS 0x18
asm ("pushl CS"
);
或東西作爲輸入參數:
asm("pushl %0 \n\t"
:"m"(CS) \
)
可以將宏CS在上述內聯彙編代碼中使用?
代碼如下:一個宏可以用於內聯asm嗎?
\#define CS 0x18
asm ("pushl CS"
);
或東西作爲輸入參數:
asm("pushl %0 \n\t"
:"m"(CS) \
)
可以將宏CS在上述內聯彙編代碼中使用?
CS可以在第二個例子中使用,而不是第一個。
宏在編譯器/彙編程序工作之前被替換,所以它們工作,不管C或彙編。
但是宏不在字符串中擴展,所以第一個示例不起作用。
如果你想第一個例子中工作,使用stringization:
#define STR1(x) #x
#define STR(x) STR1(x)
asm ("pushl " STR(CS));
這擴大STR(CS)
到"0x18"
與"pushl "
串接它。
或建立一個x86的彙編
call macro1 ;from anywhere in asm code
.macro1
do stuff
ret
如果你談論緊靠GNU工具鏈裏面然後是 - 發生了什麼事讓你認爲你不能? –
只有後者纔有效。這可能對每個人都不明顯 – hirschhornsalz
@PaulR:我不熟悉asm,你的意思是說上面的兩種形式都對嗎? –