amazon検索
最近のコメント
Recent Entries
Archives
Search


Links
Calendar
2014年08月
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Powered by
Movable Type 2.65
カテゴリ別アーカイブ
RadioSharkPlayer [14件]
VBA [2件]
VC [1件]
VSTi_ChordMaster [8件]
アセンブラ [2件]
知識 [4件]
TOTAL:

TODAY:

YESTERDAY:


2006年02月05日

_NASMその2

VC2003.netでnasmを使うには
プロジェクトの中でアセンブリ形式のプログラミングを行ったファイルに対してプロパティシートをオープンして、カスタムビルドのセッティングをするのがよいでしょう。プロジェクトの一部として科学技術計算を効率的に行うためのnasmを使うことがほとんどだと思いますので、以下の方法がよいと思われます。

例えば

nasmw -p ".\engine\i386\Nasm.cfg" -dWIN32 -f win32 -o ".\bin\debug\$(InputName).obj" "$(InputDir)$(InputName).nas"

のようにカスタムビルドのセッティングをします。
ここでは.nasという拡張子を使っていますが多くは*.asmと表記されることが多いようです。
-p で インクルードファイルの読み込みを指定
-dWin32 で 各種インクルードファイル設定でWin32形式の定義を採用するためのオプションです。インクルードファイルを利用したアセンブラコンパイルにはよく使われるオプションです。
-f win32でwin32形式のオブジェクトファイルを書き出すことになります。
-o で 出力するオブジェクトファイルの名前を定義します。
-I".\engein/i386"のようにインクルードファイルを読み込むこともできるようです。

今回、自分は午後のこ〜だを自分でコンパイルしたときにnasmというものを知りました(今更ですw 自分の使っているCPUに最適化されたみたいでdllのサイズもちっさくなったし、エンコードもなんか速くなった気がします。

アセンブリかー、今の自分にはきついプログラミングだなぁ。高校生のときZ80とかいうマイコンで触って依頼の大接近だわ。どうやってこんなの調べるんだろと思いつつインテルからPentium4プロッセッサの仕様書を3つ(上巻・中巻・下巻)ゲットしてみた。今から理解しはじめたら半年以上かかりそうなボリュームっす。でも、今回午後のこ〜だをコンパイルしてみて勉強になったなぁ。

2006年02月04日

_NASMその1

極まれにアセンブラをVC2003.netで利用することがあります。VS2003.netでアセンブラを使うときに便利なカスタムビルドコンパイラの紹介です。しかもフリーです。大多数の人はここにお世話になるんじゃないでしょうか?アセンブラって何?って...オクサン。そりゃもう機械語を16進数で表記したニーモニックという形式の命令を書きなぐったようなプログラムがありまして、

ニーモニック表記のイメージは下のような感じを思い浮かべてもらえればいいですね。実際は2進数なので1と0の羅列です。一番左が命令を表すコードで右にオペランドという命令に対する引数が記述されます。基本的には数値を意味するものや、命令実行用に用意したメモリアドレス番号になるね。オペランド部は3つだったり、2つだったり、いろいろです。命令部の桁数やオペランドの桁数もCPUによって様々。

16進でニーモニック表記をイメージした場合

55 6D 2B
67 FF 2B
55 6D 2B

55っていう命令がオペランド1(6D)というメモリアドレス部にオペランド2の値(2B)っていう値を格納しなさいというものだったり、そういう感じでプログラミングされてるんですねぇ。こんなやり方でウィンドウズプログラミングなんかやったら死ねるw

2進の場合(アクマで想像ですよw
01010101 01101100 00101011
01110111 11101100 00101011 
01010101 01101100 00101011 
 
これを少しだけ分かり易くしたのがアセンブリ言語ってことになります。

命令の部分を文字に置き換えます。つまり数字と命令を対応させる表みたいなのがあるとおもっていだければよいと思います。そうすると

LD 6D 2B ←LDはLOADとかいう英語をうまく2文字くらいで表してたりする?
MOV FF 2B
LD 6D 2B

まーこんな感じらしいです。これでも実際プログラムやれっていわれると、ちょっと厳しいんだけどね。ニーモニック表記よりは何をやってるかがわかっていいよね。

つまり!こうやって1と0の表記を16進数にして表したり、何かの文字列に置き換えたってことは、結局は文字列表記にしたものを1と0の羅列に変換しないとコンピュータには何も命令できないのです。人間さまが勝手に対応表とかつくっちゃったんだから、その対応表から元の形に戻す必要があるよね。文字列とか渡されても電圧の起伏でしか処理を決められないコンピュータさんは1と0の2値で表現されるようなものを渡されないと困るんすね。この変換を機械語からアセンブリ言語に翻訳していると見立てるとコンパイラは機械語翻訳機という位置付けになるんすね。この仕組み自体を人間さまが考えているのでコンピュータの電子回路をうまく利用するひとつの表現手法ですな。C言語とかはアセンブリで記述した場合の一定の命令の流れをさらにわかりやすい文字列にまとめた言語ってことになるよ。だけど決まった形のアセンブリ言語のカタマリを使いまわすので、実は効率がわるい。なるべく機械語に近い形でコンピュータに信号を送ったほうがいいんだよね。

ともかく・・・
そこで登場するのが、intelやamdのCPUに忠実なアセンブラ(機械語コンパイラ)のこやつです。

NASM(Netwide Assembler)
現在(2003-02-04)リリースされているものはVersion0.98です。
入手は以下のURLのサイトからになります。

http://sourceforge.net/project/showfiles.php?group_id=6208

Microsoft Windowsしか、知らずに生まれてきた僕だから、ダウンロードするのは上記ページに様々なOS用に幾つか用意されてあるNASMの中から

Win32 binaries(コマンドライン専用:Win32用コンパイル済みexeセット)

これを選択します。DOSの方も動くと思うけど、使い勝手は悪そうです。試しに使ってみたら、Win32コマンドプロンプトからだと何にもメッセージが帰ってこないね。コマンドヘルプすらない感じだった。
ダウンロードしたzipファイルの中にはアセンブラと逆アセンブラの実行ファイルが入っとります。ありがたいです。まじでありがたいです。IntelやAMDは仕様書を配ってはいますが、やっぱこういう実用的なものも配って欲しいよね。うーんCPUメーカからしたら世の中にたくさんあるオペレーティングシステム用のアセンブラなんて知ったこっちゃないって言われりゃ、何も言い返せません。

こういうものはOSを作った人が提供するべきなんだろうね。でも、OSの仕組みさらけ出したり、OSを使ってのアプリ開発自体を商売にしているマイクロソフトはタダでは提供しません。これが経済をここまで成長させてきた、ひとつの仕組みだったりします。こうやってお金稼ぎしながらアプリを開発できるからこそ、みんな必死になってアプリ開発をしたんすね。しかもMicrosoftWindowsというOSを主軸としてここまでやってきた。もう僕らは後戻りできないところまで歩いてきたんだ。今更、引き返せないよ。引き返したいけど、引き返せない。もう戻れないんだ。

引き返せると自負するパワフルな人がいれば、どうぞお早めに!いま、80x86CPU市場では、少数の非力な人間どもが立派なセキュリティと最高の使い勝手を備えたOSを開発中ですが、Windowsにとって変われるだけの魅力や素質や可能性はどれもないようです。むしろ、ますます差は開きつつあるように思います。

nasm.exe:アセンブラ、コマンドラインアプリ
ndisasm.exe:ディス(逆)アセンブラ、コマンドラインアプリ

あ、今日はここまでっす。
VC2003.netで、このツールをつまく使う方法はまた今度(いつ? さぁ?