zoukankan      html  css  js  c++  java
  • 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:DevToolsTurboc2Lib -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:DevToolsTurboc2Include -c -oL1_4.OBJ L1_4.c
    
    L1_2.OBJ : L1_2.c
        tcc -IC:DevToolsTurboc2Include -c -oL1_2.OBJ L1_2.c
    
    clean:
        del *.obj
        del *.exe
    

     

    总结:

    1. 古老的技术和资料,有其价值所在,还是可以花心思学一下。

    2. 注意16、32、64位环境问题。

  • 相关阅读:
    在千万级的数据库查询中,如何提高效率?
    SQL的触发器和存储过程详解
    如何提高mysql的安全性?
    mysql的触发器
    HDU5564 Clarke and digits
    JOI2014Final 飞天鼠
    Topcoder10073 SRM418 BarracksEasy
    Topcoder9902 SRM416 DancingCouples
    Topcoder8307 SRM390 SetOfPatterns
    POJ1741 Tree(点分治)
  • 原文地址:https://www.cnblogs.com/robnetcn/p/8689138.html
Copyright © 2011-2022 走看看