<Home> → <weekly making now!> → <weekly making now! (00.07.30)>
00/10 現在、[Borland C++ Compiler 5.5 Techniques] の方で Borland C++ Compiler について纏めています。最新情報は上記の page でどうぞ。
Borland C++ Compiler 5.5 (以後、BCC) は既に設定済みを前提にしています。[Borland C++ Compiler 5.5を弄ぶ] の続き、のような物です。
BCC が無償ダウンロードされて以来、色々遊んでいたのですが、最近ではさらに [Turbo Debugger(Inprise Japan)] まで無償ダウンロードさせてくれるようになりました。
後、もう一つ欲しい機能があるのです。
それはインラインアセンブラです。インラインアセンブラとは source に Assembler を埋め込む機能なのですが、BCC では Turbo Assembler(以後、TASM) がインストールされていないと使えない機能なのです。今の所、TASM を無償ダウンロードされてなく諦めるしかないようです。
TASM を使わない他の方法はないものか、というのが今回の目的です。今回は NASM を使用してみようと思います。
x86 系の Assembler です。この Assembler は Windows に留まらず DOS や OS/2、PC UNIX 系など、様々な OS をサポートしています。扱いは基本的に Free で、しかも source 自身も公開しています(LICENSE の詳細は archive 内にあるので各自確認してください)。Linux では、Kernel で数多く NASM を使用しています。また MMX や SSE もサポートしており [午後のこ〜だ(With Unz)] でも使用されています。
取り敢えず、以下の本拠地から download してみましょ。
path の通っている所に nasmw.exe をコピーしたら、いよいよ実践です。
今回は [CPUってどうやって識別するの?] (古いなぁ) の BCC + NASM 版を作成します。
まずは IsCPUID() から。
return 値は十中八九、AX register を使うはずなのですが一応調べてみましょう。以下の source を「BCC32 -S TEST1.C」で make してください。
|
うまくいけば TEST1,ASM というファイルが出来ているはずです。TEST1.ASM を見る限り BOOL(int)型は EAX を返せばよいことが分かります。
_IsCPUID proc near |
ということで、IsCPUID() 部分を NASM で作ってみませう。 [cpuid1.nas] と [cpuida.c] になります。
こんな感じで CPUID をサポートしたプログラムが以下になります。
実行結果は以下のように出力されます。ちなみに私の PC は Pentium-III 550E です。
D:\Borland\project\asm\cpuid>cpuid 0 |
NASM を使用することで MMX や SSE や 3DNow なプログラムが容易に作成出来るようになります。是非トライしてみては。
実を言うと私自身 TASM を自腹購入しているので、こんな苦労をする必要性はないのですがせっかく無償ダウンロード出来るのであれば、最後まで金を使わない方法で make してみたかったのです。