首先打开helloos3中的helloos.nas,直接用记事本打开会出现乱码,可以使用sublime text 2打开它(下载地址:http://www.sublimetext.com/2)然后用UTF-8来保存就可以转换成中文了,下面是代码:
ORG 0x7c00 ;程序加载到内存的位置
JMP entry
DB 0x90 ;模拟磁盘扇区
DB "HELLOIPL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HELLO-OS "
DB "FAT12 "
RESB 18
entry:
MOV AX,0
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1
CMP AL,0 ;到字符串最后了
JE fin
MOV AH,0x0e ;AH=0ex,AL=显示字符
MOV BX,15 ;BH=0,BL=颜色代码
INT 0x10 ;BIOS显示中断
JMP putloop
fin:
HLT ;停机指令
JMP fin ;死循环
msg:
DB 0x0a, 0x0a
DB "hello, world"
DB 0x0a
DB 0
;RESB 0x7dfe-$
;times 0x7dfe - ( $ - $$ ) DB 0
times 510-($-$$) DB 0
DB 0x55, 0xaa
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432
然后真正写启动文件ipl.bin,把启动文件以外的东西去掉:
ORG 0x7c00
JMP entry
DB 0x90
DB "HELLOIPL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HELLO-OS "
DB "FAT12 "
RESB 18 ?
entry:
MOV AX,0
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1
CMP AL,0
JE fin
MOV AH,0x0e
MOV BX,15
INT 0x10
JMP putloop
fin:
HLT
JMP fin
msg:
DB 0x0a, 0x0a
DB "hello, world"
DB 0x0a
DB 0
;RESB 0x7dfe-$
;times 0x7dfe-($-$$) db 0
times 510-($-$$) db 0
DB 0x55,0xaa
然后将引导扇区的文件导入软盘中,生成img软盘映像文件:
incbin "ipl.bin"
times 1474560 - ($ - $$) db 0
最后将img文件加载到虚拟机的虚拟软驱里启动就可以了
