开始于mbr.S

之前我们了解了计算机启动内核的流程,其中启动阶段涉及到的程序有mbr和loader两个,

 mbr注意点有两个:一.  实模式下磁盘作函数 d_disk_m_16   二.mbr大小及格式

一.实现d_disk_m_16函数

 

 1 ;---------------- 实模式读取硬盘n个扇区函数---
 2 rd_disk_m_16:
 3     ;eax=LBA扇区数 ebx=将数据写入的内存地址 ecx=读入的扇区 
 4     mov esi,eax
 5     mov di,cx
 6 
 7     mov dx,0x1f2
 8     mov al,cl
 9     out dx,al
10 
11     mov eax,esi
12 
13     mov dx,0x1f3
14     out dx,al
15 
16     mov cl,8
17     shr eax,cl
18     mov dx,0x1f4
19     out dx,al
20 
21     shr eax,cl
22     mov dx,0x1f5
23     out dx,al
24 
25     shr eax,cl
26     and al,0x0f
27 
28     or al,0xe0
29     mov dx,0x1f6
30     out dx,al
31 
32     mov dx,0x1f7
33     mov al,0x20
34     out dx,al
35 
36 .not_ready:
37     nop
38     in al,dx
39     and al,0x88
40     cmp al,0x08
41     jnz .not_ready
42 
43     mov ax,di
44     mov dx,256
45     mul dx
46 
47     mov cx,ax
48 
49     mov dx,0x1f0
50 
51 .ready_go:
52     in ax,dx
53     mov [bx],ax
54     add bx,2
55     loop .ready_go
56 ret

 

二.mbr大小格式

mbr大小必须是一个扇区及512字节,并且结尾两个字节为固定的0x55,0xaa

实现:

1 ;------------------------ 填充0 -----------------------
2 
3 times 510-($-$$) db 0
4 
5 db 0x55,0xaa

 

源码链接:github

ubuntu搭建bochs

参考书籍

1.《操作系统真象还原》

2.《课堂在线ucore_lab》

转载于:https://www.cnblogs.com/HonkerYblogs/p/10385523.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值