2006.03.19)↑おおざっぱな説明コンパイラの下請けができればそれで十分だろうという発想のもとに作られたNASM風アセンブラ。アセンブラを本格的に使う人が直接使うのにはあまり向かない。KはASKAという変なアセンブラを使っていて、naskはその下請けとして使っている(ASKAにnask用のソースを作らせている)。この本ではアセンブラをちょっとしか使わないし、それにASKAは普通じゃなさ過ぎておすすめできないので、naskでいいかなと判断。アセンブラを使うことになったら、NASMにしていたと思う。生成コードの質がNASMより良い。BINモードでは、アドレス値そのものに対する乗算やビット演算などを許すなど、文法が理解しやすい(NASMではアドレスに対して許されるのは加算と減算のみであって、乗算やビット演算などはアドレス差に対してのみ許される)。naskは下請け用途で作ってあるのでエラーメッセージが貧弱。ちなみにNASMはこちらです。http://www.nasm.us/http://sourceforge.net/projects/nasmhttp://nasm.sourceforge.net/doc/html/nasmdoc0.htmlよくできたマニュアルです。それぞれの命令がどんな2進数に変換されるのかが分かります。↑もっと詳しいエラーが見たい!ときは・・・まずリストファイルを出力させます。リストファイルをテキストエディタで開いて、ERRORという文字列を検索してみてください。↑NASMとの違いは?基本的にほとんどありません。あれこれいうよりも、NASMで書いたらどうなるかを見るほうが早いと思うので、helloos5をNASMで書き直してみました。0直すのは全60行中、この2ヶ所(警告なしでは3ヶ所)だけでした。ちなみに$$というのはORGの番地のことで、つまり0x7c00です。naskでも$$は使えるのでNASM用に書き換えても問題なくアセンブルできますが、なんでわざわざ$$みたいなものを使わなきゃいけないのか、初心者には理解しにくいと思います。naskを使うだけでそういう面倒な説明を本文に書かずに済んでいます。entry」のSHORTを省略すると意図しないコードになるようです。名無しさんの報告によると、NASMはRESBをコード内に混ぜるのが好きではないらしく警告が出ます。いうややこしさもNASMを使わない理由です。naskならSHORT指定をしなくてもSHORTになりますし、分かりやすいRESBだけで済みますからね。これだけじゃつまらないのでharib00gのipl10.nasでもやってみました。0おっとこれも全107行のうちこれだけしか違わないようです。物足りないのでさらにharib00iのasmhead.nasでもやってみました。0全147行中、直したのはこれだけです。NASMには命令セットを指定する命令がありません。WCOFFの例もあったほうがいいかなと思ったので書いておきます。harib04gのnaskfunc.nasです。この行削除NASMでは[FORMAT]文がありません。[FILE]文もありません。range」というエラーが出るかもしれません。いうふうに「NEAR」キーワードを入れてください。naskでは何も書かない場合はNEARかSHORTなのかを自動的に選択しますが、NASMではこのような自動最適化能力がないせいです(うわさによると一部のバージョンではこの能力がある?)。略で、.objファイルの種類の一つです。COFFといえばDJGPP-COFFのことを言うと思うのですが、マイクロソフト社はこれを一部改造した亜流のCOFFを使っています。これがwin32-COFFです。DJGPP-COFFの.objになる)。ちなみにGNUのアセンブラであるgasも、Windows版ではwin32-COFFを出力しているようです。未定義命令はエラーにしてよ!「たとえばCPUID。エラーにならないから気が付くのに苦労しちゃったよ!」まずはどうもすみません。これがエラーにならない最大の理由は、文法のお手本にしたNASMとの互換性のためでした。いうラベルの宣言だとみなされる仕様になっています。未知の命令に遭遇するとそれはラベル宣言だと解釈してしまうわけです。この仕様をnaskも忠実に引き継いでいるのです。当時はできるだけNASMに近づけておくほうがドキュメントの整備が楽になるからいいやとばかりに、こんな細かい仕様まで気にしてあわせた記憶があります。今になって思えば、これはむしろNASMの欠陥を引き継いだともいえます。HLTと書くべきところをHALTと書いてしまったとしても気づけないことになりますからね。いうことで今度のnaskの修正時には、単独のラベル宣言に関しては、末尾にコロンがない場合はエラーにするようにします。NASM互換を優先して、このエラーを無効にする予定です。ついでに、naskでのエラー発生時にエラー行を出力するようにするかもしれません。指示どおりやってみました。最初の2つは警告どまりでしたが、最後の1つはエラーでした。11:41:13ご報告ありがとうございました。「NASMとの違いは?」に書き足しました。15:00:40間違いなくビルド方法が悪いのだと思いますが、ブートローダー部分がうまく書き込めませんでした・・。37ご報告ありがとうございます。entry」の部分の問題のようです。直し方について「NASMとの違いは?」に書き足しました。ちなみにgccやldのオプションがそれでいいかどうかは当方では確認していません。00:43:58CPUIDやRDMSRなどNASKが未対応な命令は無視されるようですが、せめてエラーメッセージが出てくれたほうがわかりやすいと思います。未対応だということに気が付くのに少し時間がかかってしまいました。00:22:38改善要望をありがとうございました。お返事を上記の「未定義命令はエラーにしてよ!」に書きましたので、よろしければごらんください。05:16:41ご回答ありがとうございました。ラベルとして認識されていたのですか・・・納得です。07:38:56toolsのnaskを見ようとしたらなぜかこのページに来てしまいます。URLはhttp://hrb.osask.jp/wiki/?tools/naskです。12:15:43ご指摘ありがとうございます。Seroさんのページと混ざっていたようです。バックアップから修復しました。15:40:52NASMで命令セットを指定したい場合はCPUディレクティブを使えば大丈夫です。