1. 程式人生 > >16bit C & ASM 如何混合編譯?

16bit C & ASM 如何混合編譯?

.exe 資料 bit urb 價值 nmake 開發 include 生成

起源:

今天在看以前沒看完的一本書《圖形程序開發人員指南》,在做裏面的例子。

第一章就出問題了,一個例子“L1_2.c, L1_3.asm" ,這是C程序和ASM匯編程序的混合編譯問題。

總是報各種錯誤,無法實現。

原因:

當時是2000年左右,應該是DOS環境,16bit的程序。

一開始,忽略了這麽多平臺限制,先用gcc編譯,後來用nasm編譯那段asm程序,要改個小語法,還報幾個錯。

解決:

後來還是用古老的 TC 2.0 作 C程序的編譯器,以及鏈接器。

那個 asm匯編文件 用 masm (版本5.11,6.1都可以) 或者 tasm 都可以。

貼一下 Makefile 文件。 哦,這個是用了 make 工具。要麽是 gcc套件內的make.exe,要麽是 VC套件內的 nmake.exe。

期間,還出現過一個函數總是找不到定義,原來是大小寫的問題。 masm/tasm 默認是全部生成為大寫。需要用 /Ml 或 /ml 打開。

成果:

test.exe : clean L1_2.obj L1_3.obj
    tcc -LC:\DevTools\Turboc2\Lib\ -etest.exe L1_3.OBJ L1_2.OBJ

# masm /Ml
# tasm /ml
L1_3.OBJ : L1_3.asm
    tasm /ml L1_3.asm;

L1_4.OBJ : L1_4.c
    tcc -IC:\DevTools\Turboc2\Include\ -c -oL1_4.OBJ L1_4.c

L1_2.OBJ : L1_2.c
    tcc -IC:\DevTools\Turboc2\Include\ -c -oL1_2.OBJ L1_2.c

clean:
    del *.obj
    del *.exe

總結:

1. 古老的技術和資料,有其價值所在,還是可以花心思學一下。

2. 註意16、32、64位環境問題。

16bit C & ASM 如何混合編譯?