2012-02-16 111 views
0

我在GCC內聯彙編風格,內嵌彙編下面的C代碼如何在icc中使用gcc內聯彙編?

asm goto("1: jmp %l[t_no]\n" 
     "2:\n" 
     ".section .altinstructions,\"a\"\n" 
     " .long 1b - .\n" 
     " .long 0\n" 
     " .word %P0\n" 
     " .byte 2b - 1b\n" 
     " .byte 0\n" 
     ".previous\n" 
     : : "i" (bit) : : t_no); 

我願與國際刑事法院進行編譯但編譯時錯誤:

error: invalid constant in assembly language instruction 
asm goto("1: jmp %l[t_no]\n" 

如何解決問題?謝謝。

+0

對於JMP的問題:如果你是用gcc編譯,我會懷疑你沒」 t代碼中定義了t_no標籤。對於ICC,他們可能不支持指定這樣的標籤。你有沒有試過用'jmp%l1'? – 2015-03-06 21:06:55

回答

0

我相信你應該使用-fasm-blocks命令行選項。

+0

我知道,但發生錯誤。我相信這是AT&T風格和英特爾風格的問題。 – qpalz 2012-02-16 11:16:49

0

icc支持Intel(nasm)和GNU彙編程序樣式。

爲GNU語法使用__asm__原始:

__asm__ (" 
    movq %rsp, %rbpn 
"); 

對於Intel語法使用__asm{}

__asm{ 
    mov  rbp, rsp; 
} 
+0

對於Gnu語法或Intel語法,是'asm(「something」)? – qpalz 2012-02-16 11:35:46

+0

它是GNU語法afaik。也許你必須插入一些預處理宏,這些宏可以根據編譯器在指令之間切換。 – jupp0r 2012-02-16 11:53:47

+0

'asm goto(「1:jmp%l [t_no] \ n」)':錯誤:彙編語言指令中的無效常量。爲什麼? – qpalz 2012-02-16 12:03:52