В этом случае вместо 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 [any other object files], nasmOrg.bin
Обратите внимание, что если опустить запятую и следующее имя результирующего бинарного (nasmOrg.bin), или если вы задаете имя с. расширение COM (например, nasmOrg.com), TLINK откажет связать, это будет что-то вроде:
Error: Cannot generate COM file : invalid initial entry point address
И вам придется изменить 0x7C00 на 0x0100, чтобы сделать программу .COM.
В википедии он говорит: «В файле нет смещений файлов (например, указателя на таблицу символов), поэтому компоновщик должен анализировать все записи (записи) объектного файла, чтобы получить информацию об этом». Это то, о чем вы говорите? –
@ColeJohnson No. Это предложение о создании исполняемых файлов. Вероятно, вы хотите опустить параметр '-fobj', если хотите создать загрузчик (или посмотреть другой ответ). – copy