为什么NASM没有使用org指令编译到目标文件?
org 0x7C00
nop
mov ax, ax
nop
如果我用以下代码编译:
nasm -O0 -fobj temp.asm
无论出于何种原因,NASM都会给我一个错误:
temp.asm:1: error: parser: instruction expected
答案 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