編譯器介紹--OpenWatCOM編程
前言函數
對於16位程序的開發或許各位並不陌生。可是,隨着Win32,Linux,BSD等32位操做系統的普遍應用,我想各位必定以爲:如今還有誰會用16位 的開發呢?不過,你要知道,其實如今不少地方均可以有16位的開發。不但如此,由於16位的指令簡潔,並無32位的那麼複雜。因此,對16位的研究就是 爲32位打基礎。因此,即便如今32位的程序,系統普遍的應用,即便64位的系統正在陸續推出,16位仍然是不能不瞭解的硬件平臺。工具
曾經看過一本上海高中學生的計算機教材,上面使用的C語言編譯器是Turbo C。起先,我我的以爲很奇怪,後來才瞭解。原來,國內不少地方的計算機教程都是使用Turbo C做爲教C語言的編譯環境的。可是,Turbo C畢竟是Borland公司的產品,雖然如今你能夠無償使用。可是相對來講,Turbo C已經不被Borland更新了。並且,網上不少的Turbo C的下載都不徹底。開發工具
在看了FreeDOS的內核後發現,原來他們的內核的編譯器用的是OpenWatCOM(雖然他也能夠用Turbo C,MS C編譯,可是他們推薦的是OpenWatCOM。網上下載的編譯完成的內核也是OpenWatCOM編譯的),因此我也就接觸了一下 OpenWatCOM。感受還不錯,因此在此向各位看官介紹一下。spa
下載,安裝和設置操作系統
在盜版充斥着這個中國市場的時候,咱們不得不作一個選擇,購買正版,仍是盜版。其實,對於前者就如今的國民收入那是不太現實的(指購買全套的開發軟件)。 然後者隨着反盜版程序的日益先進,盜版軟件也變的四處碰壁,更況且使用盜版開發工具開發出來的程序是合法的麼?因此,我我的仍是比較喜歡GNU和 OpenSource的東西。.net
OpenWatCOM是一個OpenSource的工具,你能夠從網上免費得到其二進制程序和源代碼。而且,她也能夠支持至少如下幾個系統平臺:DOS,Win16,Win32,OS/2。你能夠從ftp://ftp.openwatcom.org/watcom/zips/ 得到最新的版本。因爲,32位的開發工具如今處處均可以找到,像MinGW就是不錯的開發工具。因此咱們就只把OpenWatCOM做爲16位開發工具吧。unix
你能夠從上面那個FTP站點下載以下zip文件。blog
cm_core_all - Core binaries (All hosts)
cm_core_dos - Core binaries (DOS host)
cm_core_doswin - Core binaries (DOS & Win hosts)
cm_clib_hdr - C runtime library header files
cm_clib_a16 - C runtime libraries (16-bit all targets)
cm_clib_d16 - C runtime libraries (16-bit DOS)
clib_a16 - C runtime libraries (16-bit all targets)
clib_d16 - C runtime libraries (16-bit DOS)
core_doswin - Core binaries (DOS & Win16 hosts)
c_doswin - C compiler (DOS & Win16 hosts)
ext_dos4gw - DOS/4GW DOS extender教程
固然,其中有些文件若是你以爲不須要,也能夠不下載。這徹底取決於你本身。
當一切都下載好後,咱們就要開始安裝了。其實也很簡單,你只要將這些ZIP文件中的文件複製到一個指定的目錄中就能夠了(這樣的話就不用修改註冊表了,也 不會有無聊的垃圾文件)。固然,其中有一個文件 license.txt 會重複出現,你能夠對其履蓋也能夠不復制,由於他們的內容都是同樣的。如今咱們假設你複製在 (OpenWatCOM) 處(這裏是一個替代符,爲了便於我後面告訴你如何設置)。
編譯器的設置確實挺讓人心煩的。咱們要爲OpenWatCOM設置以下幾個環境變量,WATCOM,Path,INCLUDE,LIB。你能夠經過 個人電腦->屬性->高級->環境變量來設置。
添加或者修改以下變量。
WATCOM=(OpenWatCOM)
Path=%Path%;%WATCOM%\binw
INCLUDE=%WATCOM%\H
LIB=%WATCOM%\lib286;%WATCOM%\lib286\dos
注意,上面的(OpenWatCOM)是你OpenWatCOM的安裝目錄。另外,%Path%是指你原來Path變量的內容。
好了,直到如今你的WatCOM算是真正安裝好了。如今你可使用終端來看一下。在終端中輸入 wcl 或者 wcc 能夠得到一些幫助信息和版本信息。不過,wcl只是傀儡,真正有用的仍是wcc。
編譯程序
咱們先來編譯一個C文件吧。咱們先生成一個以下的C文件。
//main.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("Hello World!\n");
return(0);
}
//main.c end
而後咱們就用以下命令編譯。
wcl main.c
咱們就能夠在main.c的目錄中找到一個名位main.exe的程序。是否是和Turbo C的生成方式很像?
而後咱們再來編譯一下彙編和C結合的文件吧。不過,這裏我使用的是NASM,你能夠從網上免費得到,只要複製到binw目錄中就能夠了。(她只有兩個小文件)。
咱們生成以下的文件
;my.asm
global myfunction_
myfunction_:
mov ax,0x16
ret
;my.asm end
注意,這裏和別的C語言有些不一樣,由於她的那個_是加載函數名後面。
好了,咱們如今修改一下main.c
//main.c
#include <stdio.h>
#include <stdlib.h>
int myfunction(void);
int main(int argc, char *argv[])
{
printf("myfunction : %d\n",myfunction());
return(0);
}
//main.c end
以下編譯
wcl -c main.c
nasm -f obj my.asm -o my.obj
wcl main.obj my.obj
編譯完成後你就能夠在目錄中找到一個名位 main.exe的程序。運行她後,就會有以下顯示。
myfunction : 22
是否是很棒?
其實還有更多的功能等你去發掘呢。若是你真的所以喜歡上16位開發,那麼我推薦一個操做系統--FreeDOS。這個嘛,我的喜愛。若是你像讓你的程序在沒有安裝系統的機器上運行,FreeDOS絕對比MS-DOS來的自由。
本人就介紹到這裏,但願各位如何有任何意見,問題均可以在 http://blog.csdn.net/visioncat/ 上面提出。若是您想轉載個人文章或者引用個人文章,請您,固然也不是必須的,在http://blog.csdn.net/visioncat/ 上告訴我一聲。固然,這些文章你能夠全篇自由複製。
個人格言:不管是程序仍是思想,惟有在不斷的交流下才能越發完善。
北斗星君(黃庠魁)
二〇〇五年六月二十日
各位注意,根據某人所犯錯誤。讓我以爲應該提醒各位。請使用 16位的 NASM編譯彙編程序。由於WatCOM是16位編譯器,若是用32位的NASM編譯,會不出現問題。請使用16位NASM(即在DOS下運行的NASM)。謝謝
OpenWatcom C++的圖形編程庫(Grahplib)本地下載: