看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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