[30天自制操作系统]day_2

恩,这是一个自己的小梦想,虽然很大程度上仍然是仿制,但是如果真能做到作者的那个水平那我该是有多高兴。


第一步,学着制作引导扇区,也是于渊的《自己动手写操作体统》的开篇内容,把两者的代码杂糅了一下,写了一个自己看着还算舒服的,也算启动成功,算是迈出的一第一步吧,千里之行始于足下~


org 7c00h

jmp start
nop

db 'nVIDIA  '   ;BS_OEMName,厂商名,8字节
dw 0x200        ;BPB_BytsPerSec,每扇区字节数,2字节
db 0x01         ;BPB_SecPerSec,每簇扇区数,1字节
dw 0x01         ;BPB_RsvdSecCnt,boot记录占用多少扇区,2字节
db 0x02         ;BPB_NumFATs,共有多少FAT表,1字节
dw 0xe0         ;BPB_RootEntCnt,根目录文件数最大值,2字节
dw 0xb40        ;BPB_TotSec16,扇区总数,2字节
db 0xf0         ;BPB_Media,介质描述符,1字节
dw 0x09         ;BPB_FATSz16,每FAT扇区数,2字节    
dw 0x12         ;BPB_SecPerTrk,每磁道扇区数,2字节
dw 0x02         ;BPB_NumHeads,磁头数,2字节
dd 0x0          ;BPB_HiddSec,隐藏扇区数,4字节
dd 0xb40        ;BPB_TotSec32,4字节,如果BPB_TotSec16是0,由这个值记录扇区总数
db 0            ;BPB_DrvNum,中断13的驱动器号,1字节
db 0            ;BS_Reserved1,未使用,1字节
db 0x29         ;BS_BootSig,扩展引导标记,1字节
dd 0            ;BS_VolD,卷序列号,4字节
db 'catOS      ';BS_VolLab,卷标,11字节
db 'FAT12   '   ;BS_FileSysType,文件系统类型,8字节

start:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax

print_message:
mov bp,msg
mov cx,msg_length
mov dx,0
mov bh,0
mov al,1
mov bl,10
mov ah,13h
int 10h
;BIOS 10h号中断
;ah=13h,用于显示字符串
;es:bp指向串地址
;cx=串长度
;dh,dl=起始行列
;bh=页号
;al=1,bl=属性时显示方式为串:char,char,char...且光标跟随移动

finish:
jmp $

msg:
db 'hello catOS'
msg_length equ $-msg

times 510-($-$$) db 0
dw 0x55aa


不过在心中仍然留下了一些疑问。

1.在《30天》中作者开篇就引入了FAT12格式,不知这样做有何用意,或许以后会用?

2.我记得0x55aa是作为引导扇区的结束符而存在,也就是说没有这个的话BIOS不会认为这个扇区是引导扇区,但是在编程的过程中,第一次我忘了加上这结束符,但是在VMware仍然按照期望的方式运行了,感觉有些奇怪。

在寻求第二个问题的答案中,发现0xaa55与0x55aa都会被认为是引导扇区的结束标志,但是疑问本身最后还是没有得到解决。



马艺婕,很对不起啦。。。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值