当前位置:首页 > 我的程序 > 正文内容

用watcom-c编译器交叉编译CL386 V1.0源码。(起始编译另一个编译器)

Peirre2年前 (2022-10-01)我的程序293

说起来编译器的生成是一个编译器生成另外一个编译器反复改进和更新得来的。

当跨越一个操作系统时一个可以生成的编译器就会在另外一个系统中难以生成,或者会出现很多BUG了。

其中原因是操作系统的文件名表示,目录表示,时钟表示,这些,以及其它的操作系统规范和硬件结构,存储结构的引响。

还有关于各种CPU的通用指令和特别指令。我的AMD CPU 能编译 C 传统的编译器,是建立在传统指令上的,所以这方面可以忽视。

最主要的就是系统的编译认可和系统的转换。同一个C语言编译系统,在不同的操作系统中它的宏定义和一些特别函数一样在标准头文件和库中有分支。

我用windows 10 + DOSBOX-X的环境编译 CL386 C语言最早的一个版本1.0,只是一个C语言编译器进化的一个实验。就是说可以把原始的C编译器应用到最先进的操作系统windows 10的环境中来。

当然不得不提一下DOSBOX-X,它的环境和以前的DOSBOX系列模拟器的环境不同,最少可以识别32位环境而少错。

我的编译器是基于watcom版权的免费的,也可以说是共享的版权,在DOSBOX常规环境中,用 watcom-c-dos 1.9和 watcom-c-dos 2.0这两个编译器环境是不好安装的。使用DOSBOX-X环境就顺利安装通过了。当然以前的DOSBOX某个版本也可以安装,硬盘中预留,也没太大的问题。

这是官方的打包编译没完全生成好的原因。得到可以顺利安装的版本要有一定的运气。

CL386编译器的源码在watcomc中是可以编译的还有一个另外的编译器是bcc 3.1版本。只有这两种编译器可以生成这个编译器。

CL386是基于DOS环境的,所以可以用DOS下的早期watcomc编译器生成。但是在windows 的 命令窗口下执行,会有一定的难度。

原因是生成的EXE的起动代码的环境配置代码是不一样的。没有其它原因,再就是C编译器对系统的识别。早期的watcomc编译器在DOS中是没有问题 的。

感谢DOSBOX-X,加了很多特点,充实和独立了DOS的模拟环境,字体也变美了。

我们要在CL386的目录下写入两种不同环境的watcomc编译器的执行环境,一个是CMD环境中的启动,一个是DOSBOX-X的启动。当然安装好watcomc后,各个版本的DOSBOX是一样用的,没什么问题。现在的DOSBox ECE r4881也可以试一下。

主文件CL386.C 编译器生成在DOS模拟器中生成是没问题的,还有一些辅助文件的生成都没问题。

有些文件是M68中的,因为是DOS环境,那用于摩托罗拉68K这个处理器的环境文件是生成不了的,因为是交叉,可以生成目标文件。这个注意一下。

DOS模拟器和CMD环境中没有别的冲突,就是<stdio.h>中的一个指针冲突,实际点就是目录名称的结构不同。有这些结构,所以有的文件只能在DOSBOX-X中生成,可以这样说,DOSBOX-X中生成的可以在CMD环境下通用。这一点是十分优秀的。其它的只能在DOS模拟器的环境下使用或者会产生编译器系统识别错误。

还有一个watcomc编译器的内联汇编问题有的编译器的汇编内联是asm{开头,有的是_asm{开头,多了一个“_"短下划线,注意一下。

4.jpg

这个一般性错误是没有安装watcomc 64位版的编译环境产生的,安装64位版本后没有这个问题。可以兼容DOS版。这个watcomc64位编译比较难找。个人认为会有一些杂项问题,不建议使用,复杂的程序纠错很麻烦,所以还是建议使用32位版本的。以后就不知道了,速度很快很好用,因为研究的是DOS程序,

现在发一些图片会很乱。不同的系统的错误不太一样,所以不如身临其境,好好体会。看实际操作环境也是没有用的。一些东西不实操难以理解。

有什么事情问我。我的微信号: Y.Pierre QQ:7535794 欢迎讨论。

下载实验性c编译器源码:https://pan.baidu.com/s/1fagDI1S7W3u7F2mBuw4saA?pwd=5n2t




分享给朋友:

相关文章

一个易语言写的函数信号发生器。

一个易语言写的函数信号发生器。

易语言写的函数信号发生器,编写的想法是准备应用“雷达”的信号发射源。本来包含声音部分,有待继续完善。下载地址:https://pan.baidu.com/s/1mi22Ico...

关于 Cannot enable. Maybe the USB cable is bad? 这个问题。

关于 Cannot enable. Maybe the USB cable is bad? 这个问题。

经常摆弄电脑,那USB接口也是插进,拔出多少次。有一天发生了这个问题,什么问题呢?见图:只要是linux 新内核,都会出现这个问题,虚拟机USB功能,DOSBOX等USB功能不可识别。在网上查看了一些...

USB设备的插入机制与USB驱动故障。

USB设备的插入机制与USB驱动故障。

USB主机检测设备,首先在USB集线器的每个端口的D+,D-上,分别接了一个15K欧姆的下拉电阻到地。集线器端口为空时,被这两个电阻拉低了电平。在USB设备端,D+或者D- 上接了上拉1.5K电阻。全...

nasm 汇编命令2021年2月后增补。

nasm 汇编命令2021年2月后增补。

;=========================================================== ;nasm 增补新汇编命令集 ; ;引用方式  ;把icpup.inc...

编译文件的各种LIB文件分析

编译文件的各种LIB文件分析

玩计算机的都知道,计算机执行的是机器指令。机器指令是手工输入的,后来有了汇编语言。汇编语言很是方便,加了很多辅助符号帮助人们使用机器指令。很多重复的指令功能,就用宏和函数过程来反复使用。后来就有了C语...

masm32v12编译器自带库masm32.lib在nasm中的使用。

masm32v12编译器自带库masm32.lib在nasm中的使用。

修改了masm32.inc文件在nasm中使用。;╔═══════════════════════════════╗ ;║                       MASM32 库改nasm  ...