• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NASMかNASKの文法の本)

NASMかNASKの文法の本

このQ&Aのポイント
  • MASMと構文が異なるため、NASM/NASKでエラーが発生しました。
  • NASM/NASKの構文について詳しく載っている本を探しています。
  • NASM/NASKでのオフセットとアドレス値のセット方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

提示したページからディレクトリを上に行って全体の目次を見るとかはしましたか? http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/nasm/chap3.html#3.6 3.6 SEG and WRT seg演算子はシンボルのセグメントベースを返す。これはシンボルのオフセットに関して定義される(?)。 mov ax, seg symbol mov es, ax mov bx, symbol はes:bxを有効なポインタsymbolにロードする。 16ビットのセグメントやグループは重なってしまうかもしれないので、必要に応じて異なるセグメントベースを用いてシンボルを参照する場合がある。 NASMでは、このためwrt(With Reference To)キーワードを用いる。 mov ax, weird_seg ; weird_segはセグメントベース mov es, ax mov bx, symbol wrt weird_seg はes:bxを、異なるが機能は同じであるシンボルへのポインタ symbolにロードする。 NASMはfar(セグメント間)コール、ジャンプをcall segment:offsetでサポートする。ここでsegmentとoffsetは即値を表す。 farプロシージャを呼ぶためには、 call (seg procedure):procedure call weird_seg:(procedure wrt weird_seg) とする。分かりやすくするため、かっこを書く。 上の最初の使い方と同じ意味にcall far procedureがある。 jmpはcallと同じ働きをする。 データセグメントでデータへのfarポインタを宣言するには、 dw symbol, seg symbol とする。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

どこでnasmを入手したかわかりませんけど、開発元でダウンロードできる SourceForge.net: Files http://sourceforge.net/project/showfiles.php?group_id=6208 ドキュメントでは不足ですか? MASMユーザーへのクイックスタートって項目もありますよ。 探したら日本語訳もありました http://ryujin.kuis.kyoto-u.ac.jp/~nobu/study/nasm/chap2.html#2.2 2.2.2 NASM Requires Square Brackets For Memory References NASMでは、メモリの内容を参照するときは [ ] をつけて、アドレスを参照するときにはつけない。故に、 foo equ 1 bar dw 2 だと、 mov ax, foo は、常にコンパイル時の値(EQUでも変数のアドレスでも)を指し、 mov ax, [bar] は、変数barの内容を指す。 また、NASMではoffsetはいらない。すなわち、 mov ax, offset bar(MASM)=mov ax, bar(NASM) となる(ともに、変数barのアドレスを表す)。 MASMのコードをNASM用に直したければ、%idefine offset とする。

roox2
質問者

補足

回答ありがとうございます。オフセットは理解しましたが、セグメント値はどのように取得するのでしょうか?