平面二进制格式

时间:2011-10-06 14:53:58

标签: assembly binary

我对bin格式有点困惑,我使用的是nasm汇编程序,我不太明白如何将segements和BBS值编码到BIN中。执行时系统如何加载此格式?

非常感谢

1 个答案:

答案 0 :(得分:2)

bin不保留任何结构或段。所有代码和数据都按原样,没有特殊的标题或描述符。 。{1}}将忽略.bss内容,并且resb / resw / resd / etc应用作占位符。

示例代码:

bin

编译:

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,"$"

Disassemblying:

C:\>nasm nsm.asm -fbin -onsm.com
nsm.asm:20: warning: attempt to initialise memory in a nobits section: ignored

在Windows XP(或DOS)上运行:

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]

操作系统预计DOS .COM风格的程序没有特殊的结构,文件的第一个字节包含必须执行的第一个指令。

有关详细信息,请参阅NASM文档。我相信你可以在那里找到你问题的所有答案。