1

NASM が org ディレクティブを使用してオブジェクト ファイルにコンパイルしないのはなぜですか?

org 0x7C00
nop
mov ax, ax
nop

これを次のようにコンパイルすると:

nasm -O0 -fobj temp.asm

NASM は何らかの理由でエラーを出します:

temp.asm:1: error: parser: instruction expected
4

2 に答える 2

3

この場合、代わりに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 に変更する必要があります。

于 2012-05-19T22:47:19.087 に答える
2

この-objオプションを使用すると、アセンブルされたファイルがオブジェクトモジュール形式で出力されます。ディレクティブの使用は、マニュアルに準拠したorgバイナリ形式でのみサポートされています。

これは、リンカが再配置を処理する必要があるためです。

空き領域を作成したい場合は、timesディレクティブが役立つかもしれません。

times 10   db 0    ; 10 zero bytes
于 2012-05-19T22:22:46.447 に答える