读书笔记《30天自制操作系统》day01

1. 计算机只知道01代码,计算机启动时从引导扇区开始执行,文件如下hellos.asm

 

        
        DB	0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f
	DB	0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00
	DB	0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00
	DB	0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
	DB	0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff
	DB	0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f
	DB	0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41
	DB	0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00
	RESB	16
	DB	0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
	DB	0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
	DB	0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
	DB	0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
	DB	0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65
	DB	0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72
	DB	0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00
	RESB	368
	DB	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
	DB	0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
	RESB	4600
	DB	0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
	RESB	1469432


2. 使用nasm编译,直接生成软盘映像

nasm -o helloos.img helloos.asm


 

3.使用bochs可虚拟运行,helloos.bxrc

romimage: file=$BXSHARE\BIOS-bochs-latest, address=0xf0000
megs: 16
vgaromimage: $BXSHARE\VGABIOS-lgpl-latest
floppya: 1_44=helloos.img, status=inserted
boot: a
log: bochsout.txt
parport1: enable=0
vga_update_interval: 300000
keyboard_serial_delay: 200
keyboard_paste_delay: 100000
floppy_command_delay: 50000
ips: 4000000
mouse: enabled=0
private_colormap: enabled=0
fullscreen: enabled=0
screenmode: name="sample"
i440fxsupport: enabled=0


4. helloos1.asm=helloos.asm

;FAT12格式文件系统头部分
		DB		0xeb, 0x4e, 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			
;程序主体
		DB		0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
		DB		0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
		DB		0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
		DB		0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
		DB		0xee, 0xf4, 0xeb, 0xfd
;显示信息部分

		DB		0x0a, 0x0a	
		DB		"hello, world"
		DB		0x0a		
		DB		0
		;原书中使用下面指令,但这个在nasm中不通过,故使用times
		;RESB	0x1fe - $			
		;times 0x1fe - ($ - $$) 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


 

5. helloos2.asm=helloos1.asm

		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

		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	4600
		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	1469432

6. FAT12信息

FAT12是MS公司Dos所支持的文件系统之一,当软盘被标准格式化后:每个磁头80个磁道,每个磁道18个扇区,每个扇区512字节,所以标准软盘的容量为:2*80*18*512=1474560B=1440K=1.44M。文件系统数据结构为:

引导程序数据结构

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值