《30天自制操作系统》day1

今天开始正式学习操作系统啦!!!《30天自制操作系统》一本比较老旧的书,希望30天都能坚持看完。

内容1:利用二进制编辑器编写操作系统,输出“hello world”;

重点总结:

  1. 了解ASCII码相关知识,查询ASCII码对应表。
  2. 打开二进制编辑器,学会利用二进制表示法编写操作系统,输出hello world
  3. 根据课本提示要求,输入相关二进制,编写run.bat和install.bat
  4. 打开!cons_nt.bat文件,输入run执行,调用PC模拟器,实现最终的hello world输出。

关键代码:

000000:HELLOIPL启动区的名称可以是任意的字符串(8字节)

000020:HELLO-OS磁盘的名称(11字节)

000030:FAT12磁盘格式名称(8字节)

000070:hello,world程序主体

 

 

内容2:利用nask写汇编程序,同样输出“hello world”;

重点总结:

  1. 利用nask编译器编写汇编程序,输出hello world;
  2. 了解RESB指令和DB指令的含义,DB指令是“define byte”的缩写,指往文件里直接写入了1个字节的指令。RESB指令是“reserve byte”的缩写,指从现在地址空出任意个地址出来。
  3. 学会利用nask.exe将.nas文件编译成为.img文件。操作如下:

提示符>..\z_tools\nask.exe helloos.nas helloos.img

  1. 将上述用二进制编译器编写的代码利用nask编译器重新编写,编译为.img文件之后重复上述操作,实现输出“hello world”

关键代码:

       DB  0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f

       DB  0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00

       DB  0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00

       DB  0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00

       DB  0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff

       DB  0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f

       DB  0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41

       DB  0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00

       RESB      16

;程序主体

       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, 0x0a, 0x0a, 0x68, 0x65 ;0x0a表示换行,之后的表示hello,world

       DB  0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72

       DB  0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00

       RESB      368

       DB  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa

       DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00

       RESB      4600

       DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00

       RESB      1469432

 

内容3:改写上述汇编程序,增强可读性,并做修改。

重点总结:

  1. 将上述代码加工润色,增强代码的可读性
  2. 学习DW指令和DD指令。DW指令是指“define word”,即为具体的两个字节。DD指令是指“double define word”,即为具体的四个字节。
  3. 明白$符号的含义,$符号是一个变量,负责告诉我们这一行现在的字节数,从而可以保证最终整个代码长度的固定。
  4. 了解FAT12格式软盘专用的代码格式。

关键代码:

; hello-os

; TAB=4

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

              DB         0xeb, 0x4e, 0x90

              DB         "HELLOIPL"          ; 启动区的名称可以是任意的字符串(8字节)

              DW        512                      ; 每个扇区(sector)的大小(必须为512个字节)

              DB         1                          ; 簇(cluster)的大小(必须为1个扇区)

              DW        1                          ; FAT的起始位置(一般从第一个扇区开始)

              DB         2                          ; FAT的个数(必须为2)

              DW        224                      ; 根目录的大小(一般设成224项)

              DW        2880                    ; 该磁盘的大小(必须是2880扇区)

              DB         0xf0                     ; 磁盘的种类(必须是0xf0)

              DW        9                          ; FAT的长度(必须是9个扇区)

              DW        18                        ; 1个磁道(track)有几个扇区(必须是18)

              DW        2                          ; 磁头数(必须是2)

              DD         0                          ; 不使用分区,必须是0

              DD         2880                    ; 重写一次磁盘大小

              DB         0,0,0x29              ; 意义不明,固定

              DD         0xffffffff               ; (可能是)卷标号码

              DB         "HELLO-OS   "   ; 磁盘的名称(11字节)

              DB         "FAT12   "         ; 磁盘格式名称(8字节)

              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      ; 2个换行

              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

 

这就是第一天的内容,比较少也比较简单,但是还是有一些问题需要注意:

1.一个是文件路径问题需要考虑清楚,一定要放在tolset文件夹下方,或者自己可以修改.bat文件的路径。

2.二是如果!con_nx.bat(!con_9x.bat)双击之后闪退,说明是路径出现问题,右击编辑然后修改路径即可

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值