16bit C & ASM 如何混合编译?

Posted robnetcn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16bit C & ASM 如何混合编译?相关的知识,希望对你有一定的参考价值。

起源:

今天在看以前没看完的一本书《图形程序开发人员指南》,在做里面的例子。

第一章就出问题了,一个例子“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 如何混合编译?的主要内容,如果未能解决你的问题,请参考以下文章

MASM 32位汇编 32与16汇编区别

如何在 Windows 上为我的操作系统编译和链接 C 和 ASM

如何在C语言中嵌入汇编?

keil4 下 c语言和汇编语言。混合编程的方法。

如何使用“asm volatile”编写 btr 指令

如何把汇编程序嵌入到C语言中