ページ 11

16ビットコンパイラ

Posted: 2006年6月02日(金) 21:48
by konisi
MS-DOSでも動くソフトを組みたいので、consoleモードのみという制限等をつけてでも16ビット版ABコンパイラが欲しいです。

64ビットのコンピュータじゃ動きませんが、MS-DOS用プログラムを書くのにわざわざC言語で書き直すのも面倒なので。

Posted: 2006年6月02日(金) 21:55
by C1000
自分は16ビットのマシンがないのでなんともいえませんが16ビットのコンパイラなんてほとんど見ないのでできたらABを使う人が増えると思います。

Posted: 2006年6月02日(金) 22:48
by konisi
32ビットのマシンなら16ビットのコードは動かせますよ。

フリーで提供されている16ビットのコンパイラで有名なところと行けば、LSI社のCコンパイラ(試食版)とマイクロソフト社のMASMアセンブラくらいですかね。

アセンブラは厳密に言えば「翻訳機」ではなく「変換機」ですが。

Posted: 2006年6月03日(土) 13:15
by C1000
>32ビットのマシンなら16ビットのコードは動かせますよ。

今使ってるマシンがXpで16ビットのコードが残ってないはずなのでそう書きました。

Posted: 2006年6月03日(土) 13:53
by konisi
XPにも、Windows/Systemフォルダ内にひっそりと16ビット用のカーネルがおいてあったりします。

Posted: 2006年6月05日(月) 21:35
by C1000
yahooで検索したらXpにも16ビットのDOSがあるそうです。

Posted: 2006年6月05日(月) 21:41
by konisi
それは知ってます。いや、他の人は知らないかもしれないですが・・・?

command.comでしたっけ?


因みに、いまActiveBasicに中途に対応している16ビットコンパイラを作ってます。ローダ自体が貧弱で、しかもネイティブコンパイラではなくアセンブラを別途使いますが^^;

最適化って難しい。



追記。 In 6/13
とりあえず主要部分が少し出来てきたので変換してみようかと思って動かしてみた。

元コード↓
A=A+1

変換後のコード↓
mov di,OFFSET A
push di
mov ax,A
push ax
mov ax,1
push ax
pop ax
pop bx
add ax,bx
push ax
pop ax
pop di
mov [di],al
(計24クロック)
分かる人にはわかるとは思いますが、どう考えても効率悪すぎです。

ちなみに、最もスマートに書くと
inc A
(計3クロック)
となります。

Posted: 2006年6月26日(月) 21:18
by C1000
MS-DOSのコンパイラだけを16ビットで別に作るというのはどうでしょう。

Posted: 2006年6月26日(月) 22:07
by konisi

そのうち自己記述してコンパイラそのものも16ビット環境で動くようにさせるつもりですが。

C言語だとBasicに比べて文字列が扱いにくいから面倒なんですよね。16ビットで直に作れますが。