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

来源:互联网 发布:品牌网络推广毕业论文 编辑:程序博客网 时间:2024/05/18 18:47

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

 

                DB0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4fDB0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00DB0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00DB0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00DB0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xffDB0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4fDB0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41DB0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00RESB16DB0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7cDB0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8aDB0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09DB0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xebDB0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65DB0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72DB0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00RESB368DB0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaaDB0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB4600DB0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB1469432


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

nasm -o helloos.img helloos.asm


 

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

romimage: file=$BXSHARE\BIOS-bochs-latest, address=0xf0000megs: 16vgaromimage: $BXSHARE\VGABIOS-lgpl-latestfloppya: 1_44=helloos.img, status=insertedboot: alog: bochsout.txtparport1: enable=0vga_update_interval: 300000keyboard_serial_delay: 200keyboard_paste_delay: 100000floppy_command_delay: 50000ips: 4000000mouse: enabled=0private_colormap: enabled=0fullscreen: enabled=0screenmode: name="sample"i440fxsupport: enabled=0


4. helloos1.asm=helloos.asm

;FAT12格式文件系统头部分DB0xeb, 0x4e, 0x90DB"HELLOIPL"DW512DB1DW1DB2DW224DW2880DB0xf0DW9DW18DW2DD0DD2880DB0,0,0x29DD0xffffffffDB"HELLO-OS   "DB"FAT12   "RESB18;程序主体DB0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7cDB0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8aDB0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09DB0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xebDB0xee, 0xf4, 0xeb, 0xfd;显示信息部分DB0x0a, 0x0aDB"hello, world"DB0x0aDB0;原书中使用下面指令,但这个在nasm中不通过,故使用times;RESB0x1fe - $;times 0x1fe - ($ - $$) DB 0                times 510 - ($-$$) DB 0DB0x55, 0xaa;启动区外输出部分DB0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB4600DB0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB1469432


 

5. helloos2.asm=helloos1.asm

ORG0x7c00JMPentryDB0x90DB"HELLOIPL"DW512DB1DW1DB2DW224DW2880DB0xf0DW9DW18DW2DD0DD2880DB0,0,0x29DD0xffffffffDB"HELLO-OS   "DB"FAT12   "RESB18entry:MOVAX,0MOVSS,AXMOVSP,0x7c00MOVDS,AXMOVES,AXMOVSI,msgputloop:MOVAL,[SI]ADDSI,1CMPAL,0JEfinMOVAH,0x0eMOVBX,15INT0x10JMPputloopfin:HLTJMPfinmsg:DB0x0a, 0x0aDB"hello, world"DB0x0aDB0;RESB0x7dfe-$;times   0x7dfe - ( $ - $$ ) DB 0                times 510-($-$$) DB 0DB0x55, 0xaaDB0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB4600DB0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB1469432

6. FAT12信息

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

引导程序数据结构