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

http://blog.csdn.net/ltbylc/article/details/8309257


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

 

[plain] view plain copy
  1.          
  2.        DB   0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f  
  3. DB  0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00  
  4. DB  0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00  
  5. DB  0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00  
  6. DB  0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff  
  7. DB  0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f  
  8. DB  0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41  
  9. DB  0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00  
  10. RESB    16  
  11. DB  0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c  
  12. DB  0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a  
  13. DB  0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09  
  14. DB  0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb  
  15. DB  0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65  
  16. DB  0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72  
  17. DB  0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00  
  18. RESB    368  
  19. DB  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa  
  20. DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00  
  21. RESB    4600  
  22. DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00  
  23. RESB    1469432  


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

[plain] view plain copy
  1. nasm -o helloos.img helloos.asm  


 

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

[plain] view plain copy
  1. romimage: file=$BXSHARE\BIOS-bochs-latest, address=0xf0000  
  2. megs: 16  
  3. vgaromimage: $BXSHARE\VGABIOS-lgpl-latest  
  4. floppya: 1_44=helloos.img, status=inserted  
  5. boot: a  
  6. log: bochsout.txt  
  7. parport1: enable=0  
  8. vga_update_interval: 300000  
  9. keyboard_serial_delay: 200  
  10. keyboard_paste_delay: 100000  
  11. floppy_command_delay: 50000  
  12. ips: 4000000  
  13. mouse: enabled=0  
  14. private_colormap: enabled=0  
  15. fullscreen: enabled=0  
  16. screenmode: name="sample"  
  17. i440fxsupport: enabled=0  


4. helloos1.asm=helloos.asm

[plain] view plain copy
  1. ;FAT12格式文件系统头部分  
  2.         DB      0xeb, 0x4e, 0x90  
  3.         DB      "HELLOIPL"        
  4.         DW      512       
  5.         DB      1         
  6.         DW      1         
  7.         DB      2         
  8.         DW      224   
  9.         DW      2880      
  10.         DB      0xf0      
  11.         DW      9     
  12.         DW      18    
  13.         DW      2     
  14.         DD      0     
  15.         DD      2880      
  16.         DB      0,0,0x29  
  17.         DD      0xffffffff  
  18.         DB      "HELLO-OS   "     
  19.         DB      "FAT12   "    
  20.         RESB    18            
  21. ;程序主体  
  22.         DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c  
  23.         DB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a  
  24.         DB      0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09  
  25.         DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb  
  26.         DB      0xee, 0xf4, 0xeb, 0xfd  
  27. ;显示信息部分  
  28.   
  29.         DB      0x0a, 0x0a    
  30.         DB      "hello, world"  
  31.         DB      0x0a          
  32.         DB      0  
  33.         ;原书中使用下面指令,但这个在nasm中不通过,故使用times  
  34.         ;RESB   0x1fe - $             
  35.         ;times 0x1fe - ($ - $$) DB 0  
  36.                 times 510 - ($-$$) DB 0  
  37.   
  38.         DB      0x55, 0xaa  
  39. ;启动区外输出部分  
  40.         DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00  
  41.         RESB    4600  
  42.         DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00  
  43.         RESB    1469432  


 

5. helloos2.asm=helloos1.asm

[plain] view plain copy
  1.         ORG     0x7c00            
  2.   
  3.         JMP     entry  
  4.         DB      0x90  
  5.         DB      "HELLOIPL"        
  6.         DW      512               
  7.         DB      1                 
  8.         DW      1             
  9.         DB      2             
  10.         DW      224               
  11.         DW      2880          
  12.         DB      0xf0          
  13.         DW      9             
  14.         DW      18            
  15.         DW      2             
  16.         DD      0             
  17.         DD      2880          
  18.         DB      0,0,0x29      
  19.         DD      0xffffffff        
  20.         DB      "HELLO-OS   "     
  21.         DB      "FAT12   "    
  22.         RESB    18            
  23.   
  24.   
  25. entry:  
  26.         MOV     AX,0              
  27.         MOV     SS,AX  
  28.         MOV     SP,0x7c00  
  29.         MOV     DS,AX  
  30.         MOV     ES,AX  
  31.   
  32.         MOV     SI,msg  
  33. putloop:  
  34.         MOV     AL,[SI]  
  35.         ADD     SI,1              
  36.         CMP     AL,0  
  37.         JE      fin  
  38.         MOV     AH,0x0e           
  39.         MOV     BX,15             
  40.         INT     0x10              
  41.         JMP     putloop  
  42. fin:  
  43.         HLT                       
  44.         JMP     fin               
  45.   
  46. msg:  
  47.         DB      0x0a, 0x0a        
  48.         DB      "hello, world"  
  49.         DB      0x0a              
  50.         DB      0  
  51.   
  52.         ;RESB   0x7dfe-$          
  53.         ;times   0x7dfe - ( $ - $$ ) DB 0  
  54.                 times 510-($-$$) DB 0  
  55.   
  56.         DB      0x55, 0xaa  
  57.   
  58.         DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00  
  59.         RESB    4600  
  60.         DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00  
  61.         RESB    1469432  

6. FAT12信息

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

引导程序数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值