作者DrStein (啤酒肚)
看板C_and_CPP
標題[問題] 請問inline asm 的可攜性
時間Sat Jul 30 17:46:46 2011
開發平台(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)
→ tropical72:#ifdef ?? 07/30 17:52
→ DrStein:樓上,那不是等於要重寫一次。。。 07/30 17:55
※ 編輯: DrStein 來自: 58.115.132.79 (07/30 18:01)
推 purpose:VC 團隊:自己程式都寫不完,還幫忙敵國 07/30 18:07
→ pico2k:沒有 07/30 19:45
→ angleevil:#ifdef _win32<--用這個區分vc和gcc.但是就是要寫兩次 07/30 20:57
→ angleevil:程序.語言標準沒定義的東西,不會有統一的標準 07/30 21:03
→ angleevil:to purpose gnu是開放軟體,裡面還是有vc團隊的閒人幫忙 07/30 21:07
推 suhorng:沒有 而且gcc的inline asm有很多東西也是VC沒有的 07/30 21:09
→ purpose:是沒錯,但微軟的人不會把幫GNU寫的東西,放進自家產品內 07/30 21:36
推 littleshan:應該是把asm寫的部份獨立出來吧 07/30 21:54
→ littleshan:都開始寫asm了就很難做到portable 07/30 21:55
→ uranusjr:@purpose 與其說不會放不如說不能放吧... 07/31 08:37
推 Bencrie:放了會中毒吧 (無誤 07/31 09:37