NASM が org ディレクティブを使用してオブジェクト ファイルにコンパイルしないのはなぜですか?
org 0x7C00
nop
mov ax, ax
nop
これを次のようにコンパイルすると:
nasm -O0 -fobj temp.asm
NASM は何らかの理由でエラーを出します:
temp.asm:1: error: parser: instruction expected
NASM が org ディレクティブを使用してオブジェクト ファイルにコンパイルしないのはなぜですか?
org 0x7C00
nop
mov ax, ax
nop
これを次のようにコンパイルすると:
nasm -O0 -fobj temp.asm
NASM は何らかの理由でエラーを出します:
temp.asm:1: error: parser: instruction expected
この場合、代わりにorg
次を使用する必要がありますresb
。
; file: nasmOrg.asm
; assemble: nasm -f obj nasmOrg.asm -o nasmOrg.obj
SEGMENT _TEXT PUBLIC CLASS=CODE USE16
; resb 0x0100 ; reserve 0x0100 bytes for a .COM program
resb 0x7C00 ; reserve 0x7C00 bytes for a boot sector
..start:
nop
mov ax, ax
nop
これは、.COM プログラムのさまざまな部分を個別のオブジェクト ファイルにコンパイルする方法です。TLINK をリンカーとして使用する場合、次のステップは次のようになります。
tlink.exe /t nasmOrg.obj [その他のオブジェクト ファイル]、nasmOrg.bin
コンマとそれに続くバイナリの名前 (nasmOrg.bin) を省略するか、拡張子 .COM を付けた名前 (nasmOrg.com など) を指定すると、TLINK はリンクを拒否し、次のように表示されることに注意してください。
エラー: COM ファイルを生成できません: 初期エントリ ポイント アドレスが無効です
また、.COM プログラムを作成するには、0x7C00 を 0x0100 に変更する必要があります。
この-obj
オプションを使用すると、アセンブルされたファイルがオブジェクトモジュール形式で出力されます。ディレクティブの使用は、マニュアルに準拠したorg
バイナリ形式でのみサポートされています。
これは、リンカが再配置を処理する必要があるためです。
空き領域を作成したい場合は、times
ディレクティブが役立つかもしれません。
times 10 db 0 ; 10 zero bytes