The Netwide Assembler: NASM

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: -o オプション: 出力ファイル名の指定
     2.1.2: -f オプション: 出力ファイル形式の指定
     2.1.3: -l オプション: リストファイルの生成
     2.1.4: -M オプション: Generate Makefile Dependencies
     2.1.5: -MG オプション: Generate Makefile Dependencies
     2.1.6: -MF オプション: Set Makefile Dependency File
     2.1.7: -MD オプション: Assemble and Generate Dependencies
     2.1.8: -MT オプション: Dependency Target Name
     2.1.9: -MQ オプション: Dependency Target Name (Quoted)
     2.1.10: -MP オプション: Emit phony targets
     2.1.11: -F オプション: Selecting a Debug Information Format
     2.1.12: -g オプション: Enabling Debug Information.
     2.1.13: -X オプション: Selecting an Error Reporting Format
     2.1.14: -Z オプション: Send Errors to a File
     2.1.15: -s オプション: Send Errors to stdout
     2.1.16: -i オプション: インクルードファイル検索ディレクトリの指定
     2.1.17: -p オプション: プレインクルードファイルの指定
     2.1.18: -d オプション: マクロ宣言
     2.1.19: -u オプション: マクロ宣言の無効化
     2.1.20: -E オプション: Preprocess Only
     2.1.21: -a オプション: Don't Preprocess At All
     2.1.22: -On オプション: Specifying Multipass Optimization.
     2.1.23: -t オプション: tasm互換モードを有効にする
     2.1.24: -w オプション: アセンブリの警告を有効または無効にする
     2.1.25: -v オプション: バージョン情報の表示
     2.1.26: -y オプション: Display Available Debug Info Formats
     2.1.27: --prefix and --postfix オプション
     2.1.28: NASMENV Environment Variable
   2.2: MASMユーザのためのクィックスタート
     2.2.1: NASMは大文字と小文字を区別する
     2.2.2: NASMはメモリ参照のために角括弧[ ]が必要
     2.2.3: NASMは変数タイプを保存しない
     2.2.4: NASMは ASSUME をサポートしない
     2.2.5: NASMはメモリモデルをサポートしない
     2.2.6: 浮動小数点の違い
     2.2.7: 他の違い

第3章: NASM言語
   3.1: NASMソースのレイアウト
   3.2: 擬似命令
     3.2.1: DB : 初期化済データ
     3.2.2: RESB : 未初期化データ
     3.2.3: INCBIN: バイナリファイルのインクルードs
     3.2.4: EQU: 定数の定義
     3.2.5: TIMES: 繰り返し命令
   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: 単項演算子: +, -, ~, ! , SEG
   3.6: SEG and WRT
   3.7: STRICT: Inhibiting Optimization
   3.8: Critical Expressions
   3.9: ローカルラベル

第4章: NASMプリプロセッサ
   4.1: シングルラインマクロ
     4.1.1: The Normal Way: %define
     4.1.2: Enhancing %define: %xdefine
     4.1.3: Concatenating Single Line Macro Tokens: %+
     4.1.4: The Macro Name Itself: %? and %??
     4.1.5: Undefining Macros: %undef
     4.1.6: Preprocessor Variables: %assign
     4.1.7: Defining Strings: %defstr
   4.2: String Handling in Macros: %strlen and %substr
     4.2.1: String Length: %strlen
     4.2.2: Sub-strings: %substr
   4.3: マルチラインマクロ: %macro
     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: %0: Macro Parameter Counter
     4.3.6: %rotate: 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: %ifdef: Testing Single-Line Macro Existence
     4.4.2: %ifmacro: Testing Multi-Line Macro Existence
     4.4.3: %ifctx: Testing the Context Stack
     4.4.4: %if: Testing Arbitrary Numeric Expressions
     4.4.5: %ifidn and %ifidni: Testing Exact Text Identity
     4.4.6: %ifid, %ifnum, %ifstr: Testing Token Types
     4.4.7: %iftoken: Test for a Single Token
     4.4.8: %ifempty: Test for Empty Expansion
     4.4.9: %error: Reporting User-Defined Errors
   4.5: プリプロセッサ ループ: %rep
   4.6: Source Files and Dependencies
     4.6.1: %include: Including Other Files
     4.6.2: %pathsearch: Search the Include Path
     4.6.3: %depend: Add Dependent Files
   4.7: The Context Stack
     4.7.1: %push and %pop: Creating and Removing Contexts
     4.7.2: Context-Local Labels
     4.7.3: Context-Local Single-Line Macros
     4.7.4: %repl: Renaming a Context
     4.7.5: Example Use of the Context Stack: Block IFs
   4.8: 標準マクロ
     4.8.1: __NASM_MAJOR__, __NASM_MINOR__, __NASM_SUBMINOR__ and ___NASM_PATCHLEVEL__: NASM Version
     4.8.2: __NASM_VERSION_ID__: NASM Version ID
     4.8.3: __NASM_VER__: NASM Version string
     4.8.4: __FILE__ and __LINE__: File Name and Line Number
     4.8.5: __BITS__: Current BITS Mode
     4.8.6: __OUTPUT_FORMAT__: Current Output Format
     4.8.7: Assembly Date and Time Macros
     4.8.8: STRUC and ENDSTRUC: Declaring Structure Data Types
     4.8.9: ISTRUC, AT and IEND: Declaring Instances of Structures
     4.8.10: ALIGN and ALIGNB: Data Alignment
   4.9: Stack Relative Preprocessor Directives
     4.9.1: %arg Directive
     4.9.2: %stacksize Directive
     4.9.3: %local Directive
   4.10: Other Preprocessor Directives
     4.10.1: %line Directive
     4.10.2: %!<env>: Read an environment variable.

第5章: アセンブラ命令
   5.1: BITS: Specifying Target Processor Mode
     5.1.1: USE16 & USE32: Aliases for BITS
   5.2: DEFAULT: Change the assembler defaults
   5.3: SECTION or SEGMENT: Changing and Defining Sections
     5.3.1: The __SECT__ Macro
   5.4: ABSOLUTE: Defining Absolute Labels
   5.5: EXTERN: Importing Symbols from Other Modules
   5.6: GLOBAL: Exporting Symbols to Other Modules
   5.7: COMMON: Defining Common Data Areas
   5.8: CPU: Defining CPU Dependencies
   5.9: FLOAT: Handling of floating-point constants

第6章: 出力フォーマット
   6.1: bin: Flat-Form Binary Output
     6.1.1: ORG: Binary File Program Origin
     6.1.2: bin Extensions to the SECTION Directive
     6.1.3: Multisection support for the BIN format.
     6.1.4: Map files
   6.2: obj: Microsoft OMF Object Files
     6.2.1: obj Extensions to the SEGMENT Directive
     6.2.2: GROUP: Defining Groups of Segments
     6.2.3: UPPERCASE: Disabling Case Sensitivity in Output
     6.2.4: IMPORT: Importing DLL Symbols
     6.2.5: EXPORT: Exporting DLL Symbols
     6.2.6: ..start: Defining the Program Entry Point
     6.2.7: obj Extensions to the EXTERN Directive
     6.2.8: obj Extensions to the COMMON Directive
   6.3: win32: Microsoft Win32 Object Files
     6.3.1: win32 Extensions to the SECTION Directive
     6.3.2: win32: safe structured exception handling
   6.4: win64: Microsoft Win64 Object Files
     6.4.1: win64: writing position-independent code
     6.4.2: win64: structured exception handling
   6.5: coff: Common Object File Format
   6.6: macho: Mach Object File Format
   6.7: elf, elf32, and elf64: Executable and Linkable Format Object Files
     6.7.1: ELF specific directive osabi
     6.7.2: elf Extensions to the SECTION Directive
     6.7.3: Position-Independent Code: elf Special Symbols and WRT
     6.7.4: elf Extensions to the GLOBAL Directive
     6.7.5: elf Extensions to the COMMON Directive
     6.7.6: 16-bit code and ELF
     6.7.7: Debug formats and ELF
   6.8: aout: Linux a.out Object Files
   6.9: aoutb: NetBSD/FreeBSD/OpenBSD a.out Object Files
   6.10: as86: Minix/Linux as86 Object Files
   6.11: rdf: Relocatable Dynamic Object File Format
     6.11.1: Requiring a Library: The LIBRARY Directive
     6.11.2: Specifying a Module Name: The MODULE Directive
     6.11.3: rdf Extensions to the GLOBAL directive
     6.11.4: rdf Extensions to the EXTERN directive
   6.12: dbg: Debugging Format

第7章: 16ビットコードの記述 (DOS, Windows 3/3.1)
   7.1: .EXE ファイルの生成
     7.1.1: obj ファイルを用いた .EXE ファイルの生成
     7.1.2: bin ファイルを用いた .EXE ファイルの生成
   7.2: .COM ファイルの生成
     7.2.1: bin ファイルを用いた .COM ファイルの生成
     7.2.2: obj ファイルを用いた .COM ファイルの生成
   7.3: .SYS ファイルの生成
   7.4: 16ビットCプログラムからの呼び出し方法
     7.4.1: 外部シンボル名
     7.4.2: メモリモデル
     7.4.3: 関数定義と呼び出し
     7.4.4: データへのアクセス
     7.4.5: c16.mac: 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 c16.mac With Pascal Programs

第8章: 32ビットコードの記述 (Unix, Win32, DJGPP)
   8.1: 32ビットCプログラムからの呼び出し方法
     8.1.1: 外部シンボル名
     8.1.2: 関数定義と呼び出し
     8.1.3: データへのアクセス
     8.1.4: c32.mac: 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: ORG が機能しない
     11.1.4: TIMES が機能しない
   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

Index