我对bin格式有点困惑,我使用的是nasm汇编程序,我不太明白如何将segements和BBS值编码到BIN中。执行时系统如何加载此格式?
非常感谢
答案 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文档。我相信你可以在那里找到你问题的所有答案。