This manual documents NASM, the Netwide Assembler: an assembler targetting the Intel x86 series of processors, with portable source.
2008/06/15更新
NASM ver2.03の日本語マニュアルです
一部のみ日本語化&誤訳あっても気にするな!
オリジナル版はこのあたりhttp://nasm.sourceforge.net/doc/nasmdoc0.html
第1章: Introduction
1.1: NASMとは?
1.1.1: なぜいまさら別のアセンブラなのか?
1.1.2: ライセンス
1.2: 連絡先
1.3: インストール
1.3.1: MS-DOS、Windowsへのインストール
1.3.2: Unixへのインストール
第2章: Running NASM
2.1: NASMコマンドライン構文
2.1.1:
オプション: 出力ファイル名の指定
2.1.2:
オプション: 出力ファイル形式の指定
2.1.3:
オプション: リストファイルの生成
2.1.4:
オプション: Generate Makefile Dependencies
2.1.5:
オプション: Generate Makefile Dependencies
2.1.6:
オプション: Set Makefile Dependency File
2.1.7:
オプション: Assemble and Generate Dependencies
2.1.8:
オプション: Dependency Target Name
2.1.9:
オプション: Dependency Target Name (Quoted)
2.1.10:
オプション: Emit phony targets
2.1.11:
オプション: Selecting a Debug Information Format
2.1.12:
オプション: Enabling Debug Information.
2.1.13:
オプション: Selecting an Error Reporting Format
2.1.14:
オプション: Send Errors to a File
2.1.15:
オプション: Send Errors to
2.1.16:
オプション: インクルードファイル検索ディレクトリの指定
2.1.17:
オプション: プレインクルードファイルの指定
2.1.18:
オプション: マクロ宣言
2.1.19:
オプション: マクロ宣言の無効化
2.1.20:
オプション: Preprocess Only
2.1.21:
オプション: Don't Preprocess At All
2.1.22:
オプション: Specifying Multipass Optimization.
2.1.23:
オプション: tasm互換モードを有効にする
2.1.24:
オプション: アセンブリの警告を有効または無効にする
2.1.25:
オプション: バージョン情報の表示
2.1.26:
オプション: Display Available Debug Info Formats
2.1.27:
and
オプション
2.1.28:
Environment Variable
2.2: MASMユーザのためのクィックスタート
2.2.1: NASMは大文字と小文字を区別する
2.2.2: NASMはメモリ参照のために角括弧[ ]が必要
2.2.3: NASMは変数タイプを保存しない
2.2.4: NASMは
をサポートしない
2.2.5: NASMはメモリモデルをサポートしない
2.2.6: 浮動小数点の違い
2.2.7: 他の違い
第3章: NASM言語
3.1: NASMソースのレイアウト
3.2: 擬似命令
3.2.1:
: 初期化済データ
3.2.2:
: 未初期化データ
3.2.3:
: バイナリファイルのインクルードs
3.2.4:
: 定数の定義
3.2.5:
: 繰り返し命令
3.3: 実行アドレス
3.4: 定数
3.4.1: 数値定数
3.4.2: 文字列
3.4.3: 文字定数
3.4.4: 文字列定数
3.4.5: 浮動小数点定数
3.5: 式
3.5.1:
: ビットごとのOR
3.5.2:
: ビットごとのXOR
3.5.3:
:ビットごとのAND
3.5.4:
,
: ビットシフト
3.5.5:
,
: 加算、減算
3.5.6:
,
,
,
,
: 乗算、除算
3.5.7: 単項演算子:
,
,
,
,
3.6:
and
3.7:
: Inhibiting Optimization
3.8: Critical Expressions
3.9: ローカルラベル
第4章: NASMプリプロセッサ
4.1: シングルラインマクロ
4.1.1: The Normal Way:
4.1.2: Enhancing
:
4.1.3: Concatenating Single Line Macro Tokens:
4.1.4: The Macro Name Itself:
and
4.1.5: Undefining Macros:
4.1.6: Preprocessor Variables:
4.1.7: Defining Strings:
4.2: String Handling in Macros:
and
4.2.1: String Length:
4.2.2: Sub-strings:
4.3: マルチラインマクロ:
4.3.1: Overloading Multi-Line Macros
4.3.2: Macro-Local Labels
4.3.3: Greedy Macro Parameters
4.3.4: Default Macro Parameters
4.3.5:
: Macro Parameter Counter
4.3.6:
: Rotating Macro Parameters
4.3.7: Concatenating Macro Parameters
4.3.8: Condition Codes as Macro Parameters
4.3.9: リスト拡張を無効にする
4.4: 条件付アセンブリ
4.4.1:
: Testing Single-Line Macro Existence
4.4.2:
: Testing Multi-Line Macro Existence
4.4.3:
: Testing the Context Stack
4.4.4:
: Testing Arbitrary Numeric Expressions
4.4.5:
and
: Testing Exact Text Identity
4.4.6:
,
,
: Testing Token Types
4.4.7:
: Test for a Single Token
4.4.8:
: Test for Empty Expansion
4.4.9:
: Reporting User-Defined Errors
4.5: プリプロセッサ ループ:
4.6: Source Files and Dependencies
4.6.1:
: Including Other Files
4.6.2:
: Search the Include Path
4.6.3:
: Add Dependent Files
4.7: The Context Stack
4.7.1:
and
: Creating and Removing Contexts
4.7.2: Context-Local Labels
4.7.3: Context-Local Single-Line Macros
4.7.4:
: Renaming a Context
4.7.5: Example Use of the Context Stack: Block IFs
4.8: 標準マクロ
4.8.1:
,
,
and
: NASM Version
4.8.2:
: NASM Version ID
4.8.3:
: NASM Version string
4.8.4:
and
: File Name and Line Number
4.8.5:
: Current BITS Mode
4.8.6:
: Current Output Format
4.8.7: Assembly Date and Time Macros
4.8.8:
and
: Declaring Structure Data Types
4.8.9:
,
and
: Declaring Instances of Structures
4.8.10:
and
: Data Alignment
4.9: Stack Relative Preprocessor Directives
4.9.1:
Directive
4.9.2:
Directive
4.9.3:
Directive
4.10: Other Preprocessor Directives
4.10.1:
Directive
4.10.2:
: Read an environment variable.
第5章: アセンブラ命令
5.1:
: Specifying Target Processor Mode
5.1.1:
&
: Aliases for BITS
5.2:
: Change the assembler defaults
5.3:
or
: Changing and Defining Sections
5.3.1: The
Macro
5.4:
: Defining Absolute Labels
5.5:
: Importing Symbols from Other Modules
5.6:
: Exporting Symbols to Other Modules
5.7:
: Defining Common Data Areas
5.8:
: Defining CPU Dependencies
5.9:
: Handling of floating-point constants
第6章: 出力フォーマット
6.1:
: Flat-Form Binary Output
6.1.1:
: Binary File Program Origin
6.1.2:
Extensions to the
Directive
6.1.3:
support for the BIN format.
6.1.4: Map files
6.2:
: Microsoft OMF Object Files
6.2.1:
Extensions to the
Directive
6.2.2:
: Defining Groups of Segments
6.2.3:
: Disabling Case Sensitivity in Output
6.2.4:
: Importing DLL Symbols
6.2.5:
: Exporting DLL Symbols
6.2.6:
: Defining the Program Entry Point
6.2.7:
Extensions to the
Directive
6.2.8:
Extensions to the
Directive
6.3:
: Microsoft Win32 Object Files
6.3.1:
Extensions to the
Directive
6.3.2:
: safe structured exception handling
6.4:
: Microsoft Win64 Object Files
6.4.1:
: writing position-independent code
6.4.2:
: structured exception handling
6.5:
: Common Object File Format
6.6:
: Mach Object File Format
6.7:
: Executable and Linkable Format Object Files
6.7.1: ELF specific directive
6.7.2:
Extensions to the
Directive
6.7.3: Position-Independent Code:
Special Symbols and
6.7.4:
Extensions to the
Directive
6.7.5:
Extensions to the
Directive
6.7.6: 16-bit code and ELF
6.7.7: Debug formats and ELF
6.8:
: Linux
Object Files
6.9:
: NetBSD/FreeBSD/OpenBSD
Object Files
6.10:
: Minix/Linux
Object Files
6.11:
: Relocatable Dynamic Object File Format
6.11.1: Requiring a Library: The
Directive
6.11.2: Specifying a Module Name: The
Directive
6.11.3:
Extensions to the
directive
6.11.4:
Extensions to the
directive
6.12:
: Debugging Format
第7章: 16ビットコードの記述 (DOS, Windows 3/3.1)
7.1:
ファイルの生成
7.1.1:
ファイルを用いた
ファイルの生成
7.1.2:
ファイルを用いた
ファイルの生成
7.2:
ファイルの生成
7.2.1:
ファイルを用いた
ファイルの生成
7.2.2:
ファイルを用いた
ファイルの生成
7.3:
ファイルの生成
7.4: 16ビットCプログラムからの呼び出し方法
7.4.1: 外部シンボル名
7.4.2: メモリモデル
7.4.3: 関数定義と呼び出し
7.4.4: データへのアクセス
7.4.5:
: Helper Macros for the 16-bit C Interface
7.5: ボーランドPascalプログラムからの呼び出し方法
7.5.1: The Pascal Calling Convention
7.5.2: Borland Pascal セグメント名制限
7.5.3: Using
With Pascal Programs
第8章: 32ビットコードの記述 (Unix, Win32, DJGPP)
8.1: 32ビットCプログラムからの呼び出し方法
8.1.1: 外部シンボル名
8.1.2: 関数定義と呼び出し
8.1.3: データへのアクセス
8.1.4:
: Helper Macros for the 32-bit C Interface
8.2: Writing NetBSD/FreeBSD/OpenBSD and Linux/ELF Shared Libraries
8.2.1: Obtaining the Address of the GOT
8.2.2: Finding Your Local Data Items
8.2.3: Finding External and Common Data Items
8.2.4: Exporting Symbols to the Library User
8.2.5: Calling Procedures Outside the Library
8.2.6: Generating the Library File
第9章: 16ビットと32ビット混合コードの記述
9.1: 混合サイズのジャンプ
9.2: 異なったサイズセグメント間のアドレッシング
9.3: 他の混合サイズ命令
第10章: 64ビットコードの記述 (Unix, Win64)
10.1: Register names in 64-bit mode
10.2: Immediates and displacements in 64-bit mode
10.3: 64ビットCプログラムからの呼び出し方法(Unix)
10.4: 64ビットCプログラムからの呼び出し方法(Win64)
第11章: トラブルシューティング
11.1: 一般的な問題
11.1.1: 効率の悪いコードを生成する
11.1.2: Jumpが範囲外となる
11.1.3:
が機能しない
11.1.4:
が機能しない
11.2: バグ
付録A: Ndisasm
A.1: はじめに
A.2: Getting Started: インストール
A.3: NDISASMの実行
A.3.1: COM Files: Specifying an Origin
A.3.2: Code Following Data: Synchronisation
A.3.3: Mixed Code and Data: Automatic (Intelligent) Synchronisation
A.3.4: 他のオプション
A.4: バグ、改善点
付録B: 命令リスト
B.1: はじめに
B.1.1: 特殊な命令
B.1.2: 従来の命令
B.1.3: Katmai ストリーミング SIMD 命令 (SSE -- a.k.a. KNI, XMM, MMX2)
B.1.4: Introduced in Deschutes but necessary for SSE support
B.1.5: XSAVE group (AVX and extended state)
B.1.6: Generic memory operations
B.1.7: Katmaiで導入された新しいMMX命令
B.1.8: AMD Enhanced 3DNow! (Athlon) 命令
B.1.9: Willamette SSE2 Cacheability 命令
B.1.10: Willamette MMX 命令 (SSE2 SIMD Integer Instructions)
B.1.11: Willamette ストリーミング SIMD 命令 (SSE2)
B.1.12: Prescottでの新しい命令(SSE3)
B.1.13: VMX命令
B.1.14: Extended Page Tables VMX 命令
B.1.15: Tejasでの新しい命令(SSSE3)
B.1.16: AMD SSE4A
B.1.17: Barcelonaでの新しい命令
B.1.18: Penrynでの新しい命令(SSE4.1)
B.1.19: Nehalemでの新しい命令(SSE4.2)
B.1.20: AMD SSE5 命令
B.1.21: Intel SMX
B.1.22: Geode (Cyrix) 3DNow! additions
B.1.23: Intel new instructions in ???
B.1.24: Intel AES instructions
B.1.25: Intel AVX instructions
B.1.26: Intel Carry-Less Multiplication instructions (CLMUL)
B.1.27: Intel Fused Multiply-Add instructions (FMA)
B.1.28: VIA (Centaur) security instructions
B.1.29: Systematic names for the hinting nop instructions