带有'-fobj'的NASM'org'指令

时间:2012-05-19 21:57:59

标签: compiler-errors syntax-error nasm object-files

为什么NA​​SM没有使用org指令编译到目标文件?

org 0x7C00
nop
mov ax, ax
nop

如果我用以下代码编译:

nasm -O0 -fobj temp.asm
无论出于何种原因,NASM都会给我一个错误:

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

2 个答案:

答案 0 :(得分: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文件:初始入口点地址无效

你必须将0x7C00更改为0x0100以制作.COM程序。

答案 1 :(得分:2)

使用-obj选项将在Object Module Format中输出已汇编的文件。仅以二进制格式accoring to the manual支持使用org指令。

原因是链接器应该为您处理重定位。

如果您想创建可用空间,可能times指令可以帮助您:

times 10   db 0    ; 10 zero bytes