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

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

Peirre3年前 (2022-10-01)我的程序311

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

当跨越一个操作系统时一个可以生成的编译器就会在另外一个系统中难以生成,或者会出现很多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




分享给朋友:

相关文章

阿里云后台的一个身份证信息查询工具。

阿里云后台的一个身份证信息查询工具。

注:此软件时效性已过,只在此陈列,没有什么意义。工具主图形界面有时会欠费,查不了时,请付1分钱给阿里云。下载地址:个人身份证阿里云查询.rar...

几种在linux中的调试器的编译结果。

几种在linux中的调试器的编译结果。

很多人用源码进行编译,会不成功,原因有很多,我现在讲讲linux 下必有的gdb调试器来说明一下。我用的linux 系统 是 优麒麟 19.04.10.1 加强版,属于试用版。随系统自带的gdb是8....

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

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

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

linux 下的 opengl SDK。

linux 下的 opengl SDK。

opengl 图形库是开放式图形库,最近出了一个freeglut3 我们下载它:sudo apt-get install freeglut3sudo apt-get install freeglut3...

linux mint 20 下编译最新内核所添加的文件。

linux mint 20 下编译最新内核所添加的文件。

linux mint 20 下编译最新内核文件所需要的两个文件包。sudo apt-get install libncurses5-devsudo apt-get install libssl-dev...

谈谈引导程序的想法。

谈谈引导程序的想法。

当个人电脑一出现就有了磁盘系统,不管是软盘,光盘,硬盘,计算机要应用操作系统就要引导,引导程序一段代码。这引导代码很小,在第一个磁盘的扇区上,平时没什么人注意它。这段代码损坏一个字节,都会造成计算机瘫...