[問題] 請問inline asm 的可攜性
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
windows : vc, icc
linux : gcc , icc
一個簡單的 inline asm ,用 vc (masn)
main(void)
{
int a, b;
a = 10;
__asm
{
MOV EAX, a;
MOV b, EAX;
}/*__asm*/
return 0;
}/*main*/
這是沒有問題的
現在討驗的是,在gcc下,是用 AT&T型式
這就不詳束,簡言之,是C語言習慣相反 ( 既 Op Src, Dst)
是有intel syntex 可以用
但要襄入的區塊 是用
__asm__
(
".. \n"
".. \n"
);
這會與微軟的嚴重不一致
更討厭的是還要手動處理 stack(就local variables,例中的a, b)
例如 原為
MOV EAX a;
gcc intel syntax:
MOV EAX, [ESP + 24];
這見鬼了,不把編譯過程的內容用組語輸出
鬼才知道 a這變數是偏 24字節
且開不同的優化 位置極可能不同,所以就實作上,
這樣搞完全不可行。
所以通常處理上,都是要回到 AT&T syntax設定變量
請問有沒有可能寫個 inline asm 讓 vc/gcc都能接受呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.132.79
※ 編輯: DrStein 來自: 58.115.132.79 (07/30 17:48)
→
07/30 17:52, , 1F
07/30 17:52, 1F
→
07/30 17:55, , 2F
07/30 17:55, 2F
※ 編輯: DrStein 來自: 58.115.132.79 (07/30 18:01)
推
07/30 18:07, , 3F
07/30 18:07, 3F
→
07/30 19:45, , 4F
07/30 19:45, 4F
→
07/30 20:57, , 5F
07/30 20:57, 5F
→
07/30 21:03, , 6F
07/30 21:03, 6F
→
07/30 21:07, , 7F
07/30 21:07, 7F
推
07/30 21:09, , 8F
07/30 21:09, 8F
→
07/30 21:36, , 9F
07/30 21:36, 9F
推
07/30 21:54, , 10F
07/30 21:54, 10F
→
07/30 21:55, , 11F
07/30 21:55, 11F
→
07/31 08:37, , 12F
07/31 08:37, 12F
推
07/31 09:37, , 13F
07/31 09:37, 13F