bin
не сохраняет ни структуру, ни сегменты. Весь код и данные идут как есть, специальных заголовков или дескрипторов нет. Содержимое .bss игнорируется для bin
, а resb / resw / resd / etc следует использовать в качестве заполнителя.
Пример кода:
bits 16
section .text
org 100h
; copy hw[] to copy[]
mov si, hw
mov di, copy
mov cx, 15
cld
rep movsb
; print copy[]
mov dx, copy
mov ah, 9
int 21h
ret
section .bss
blah db "0123456789abcdef" ; data will be ignored, nasm will warn here
copy resb 15 ; reserve 15 bytes for the text string
section .data
hw db "Hello Wrold!",13,10,"$"
Компиляция:
C:\>nasm nsm.asm -fbin -onsm.com
nsm.asm:20: warning: attempt to initialise memory in a nobits section: ignored
разборка:
C:\>ndisasm -b 16 -o 100h nsm.com
00000100 BE1401 mov si,0x114
00000103 BF3401 mov di,0x134
00000106 B90F00 mov cx,0xf
00000109 FC cld
0000010A F3A4 rep movsb
0000010C BA3401 mov dx,0x134
0000010F B409 mov ah,0x9
00000111 CD21 int 0x21
00000113 C3 ret
00000114 48 dec ax ; this is hw db "Hello Wrold!",13,10,"$"
00000115 656C gs insb
00000117 6C insb
00000118 6F outsw
00000119 205772 and [bx+0x72],dl
0000011C 6F outsw
0000011D 6C insb
0000011E 64210D and [fs:di],cx
00000121 0A24 or ah,[si]
Работает в Windows XP (или DOS):
C:\>nsm.com
Hello Wrold!
ОС ожидает, что программы в стиле DOS .COM не имеют специальной структуры, и самый первый байт файла содержит первую команду, которая должна быть выполнена.
Подробнее см. В документации NASM. Я верю, что вы можете найти все ответы на свои вопросы там.