Плоский двоичный формат - PullRequest
1 голос
/ 06 октября 2011

Я немного запутался в форматах bin, я использую ассемблер nasm и не совсем понимаю, как сегменты и значения BBS кодируются в BIN. Как этот формат загружается системой при выполнении?

Большое спасибо

1 Ответ

2 голосов
/ 07 октября 2011

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. Я верю, что вы можете найти все ответы на свои вопросы там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...