<30天自制操作系统>第一天

本书介绍了如何通过简单实例理解操作系统的构建过程。通过实践汇编语言编程,读者能够掌握基本的操作系统概念,如启动区的设置、指令的使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

买了这本书将近一年才开始看- =,最近看完第八天的内容,也就是实现了鼠标的移动。总的来说这本书感觉还是可以,大致上可以了解到一个操作系统是如何搭建。语言幽默风趣,每天的任务量不是特别多并且每天的章节内容明确,由于每个程序我都只是编译现成的代码来看实现效果,所以学完了8天的内容之后,许多概念还是迷迷糊糊,所以今天开始为每一天的内容写文章,总结这本书自己比较模糊的内容,同时也帮助自己梳理一下知识点,也为了之后学习能更畅顺。

第一天:
主要讲述一些工具及其使用,用汇编语言写程序。其中汇编语言指令
DB指令作用是往文件里直接写入一个字节。
DW指令作用是往文件里写入一个字,也即两个字节
DD即double ,也就是四个字节
用法:
DB 0xeb, 0x4e, 0x90, 0x48….
DB “HELLO-OS”
它可以直接写字符串,在写字符串时,汇编语言会自动查找字符串中每一个字符所对应的编码,然后把它们一个字节一个字节地排列起来。
RESB指令作用是用于保留字节。

以下是第一天的一个程序

; hello-os
; TAB=4                         用于调整TAB键的宽度

; 以下这段是标准FAT12格式软盘专用的代码

        DB      0xeb, 0x4e, 0x90
        DB      "HELLOIPL"      ; 启动区的名称可以是任意的字符串(8字节)
        DW      512             ; 每个扇区的大小(必须是512字节)
        DB      1               ; 簇的大小(必须为1个扇区)
        DW      1               ; FAT的起始位置(一般从第一个扇区开始)
        DB      2               ; FAT的个数(必须是2)
        DW      224             ; 根目录的大小(一般设为224)
        DW      2880            ; 该磁盘的大小(必须是2880扇区)
        DB      0xf0            ; 磁盘的种类(必须是0xf0)
        DW      9               ; FAT的长度(必须是9扇区)
        DW      18              ; 1个磁道有几个扇区(必须是18)
        DW      2               ; 磁头数(必须是2)
        DD      0               ; 不使用分区,必须是0
        DD      2880            ; 重写一次磁盘大小
        DB      0,0,0x29        
        DD      0xffffffff      
        DB      "HELLO-OS   "   ; 磁盘的名称
        DB      "FAT12   "      ; 磁盘格式名称
        RESB    18              ; 保留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

        RESB    0x1fe-$            ; 填写0x00,直到0x001fe

        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

在上述的程序中,有几个地方要说明,首先符号;是个注释命令。
还有就是RESB 0x1fe-$,美元符号表示的是这一行现在的字节数。

信息显示部分中最后的命令DB 0x55, 0xaa表示是一个启动区。软盘第一个扇区称为启动区,计算机读写软盘的时候,并不是一个字节一个字节的读写,而是以512字节为一个单位进行读写。一个软盘空间共有1440KB,除以512得2880,也就是一张软盘共有2880个扇区。
那为什么第一个扇区是启动区?因为计算机首先从最初一个扇区开始读盘,然后去检查这个扇区最后两个字节的内容是不是为0x55, 0xaa,若不是则会认为没有所需的启动程序,则会报一个不能启动的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值