[問題] 請問inline asm 的可攜性

看板C_and_CPP作者 (啤酒肚)時間14年前 (2011/07/30 09:46), 編輯推噓4(409)
留言13則, 9人參與, 最新討論串1/1
開發平台(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
#ifdef ??
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
VC 團隊:自己程式都寫不完,還幫忙敵國
07/30 18:07, 3F

07/30 19:45, , 4F
沒有
07/30 19:45, 4F

07/30 20:57, , 5F
#ifdef _win32<--用這個區分vc和gcc.但是就是要寫兩次
07/30 20:57, 5F

07/30 21:03, , 6F
程序.語言標準沒定義的東西,不會有統一的標準
07/30 21:03, 6F

07/30 21:07, , 7F
to purpose gnu是開放軟體,裡面還是有vc團隊的閒人幫忙
07/30 21:07, 7F

07/30 21:09, , 8F
沒有 而且gcc的inline asm有很多東西也是VC沒有的
07/30 21:09, 8F

07/30 21:36, , 9F
是沒錯,但微軟的人不會把幫GNU寫的東西,放進自家產品內
07/30 21:36, 9F

07/30 21:54, , 10F
應該是把asm寫的部份獨立出來吧
07/30 21:54, 10F

07/30 21:55, , 11F
都開始寫asm了就很難做到portable
07/30 21:55, 11F

07/31 08:37, , 12F
@purpose 與其說不會放不如說不能放吧...
07/31 08:37, 12F

07/31 09:37, , 13F
放了會中毒吧 (無誤
07/31 09:37, 13F
文章代碼(AID): #1ECzC8Bt (C_and_CPP)