Borland C++ Compiler 5.5 で NASM を使う

weekly making now! (00.07.30)

<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 を使用してみようと思います。

NASM(The Netwide Assembler) とは

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,C

#include <stdio.h>
#include <windows.h>

BOOL IsCPUID(VOID);

int
main()
{
  printf("Test program1\n");
  return IsCPUID();
}

BOOL
IsCPUID()
{
  BOOL bRet = TRUE;
  return bRet;
}

うまくいけば TEST1,ASM というファイルが出来ているはずです。TEST1.ASM を見る限り BOOL(int)型は EAX を返せばよいことが分かります。

TEST1.ASM の IsCPUID() 部分
_IsCPUID proc near
?live1@64:
  ;
  ; IsCPUID()
  ;
    push ebp
    mov ebp,esp
  ;
  ; {
  ; BOOL bRet = TRUE;
  ;
@4:
    mov eax,1
  ;
  ; return bRet;
  ;
?live1@96: ; EAX = bRet
  ;
  ; }
  ;
?live1@112: ;
@6:
@5:
    pop ebp
    ret
_IsCPUID endp

ということで、IsCPUID() 部分を NASM で作ってみませう。 [cpuid1.nas] と [cpuida.c] になります。

  1. [cpuid1.nas]  の make
    「nasmw -fobj cpuid1.nas」を実行します。うまくいけば cpuid1.obj が出来上がります。
  2. [cpuida.c] と cpuid1.obj の make
    「bcc32 -v cpuida.c cpuid1.obj」を実行します。うまくいけば cpuida.exe が出来上がります。これで make 終了です。
  3. cpuida.exe を実行してください
    うまくいきましたか?

こんな感じで CPUID をサポートしたプログラムが以下になります。

実行結果は以下のように出力されます。ちなみに私の PC は Pentium-III 550E です。

CPUID.EXE の出力画面
D:\Borland\project\asm\cpuid>cpuid 0
CPUID viewer v.0.01 By Mc.N
CPUID is supported!
EAX <- [0]
-----
  EAX = [00000003]
  EBX = [756e6547]
  ECX = [6c65746e]
  EDX = [49656e69]
-----

D:\Borland\project\asm\cpuid>

NASM を使用することで MMX や SSE や 3DNow なプログラムが容易に作成出来るようになります。是非トライしてみては。

ということで

実を言うと私自身 TASM を自腹購入しているので、こんな苦労をする必要性はないのですがせっかく無償ダウンロード出来るのであれば、最後まで金を使わない方法で make してみたかったのです。


<Home> → <weekly making now!> → <weekly making now! (00.07.30)>
Copyright (c) 2000 Makoto NARA (Mc.N), Some rights reserved.
This web page is licensed under a Creative Commons License.
Creative Commons License
<Terms of Use>

Valid CSS! Valid HTML 4.01!