自制操作系统1-从计算机结构到汇编程序入门

1 从计算机结构到汇编程序入门

2020.10.15

第一天的任务很简单,就是体验一下制作一个非常简易的操作系统。

1. 体验用二进制编写代码

二进制编译器链接BZ

用二进制编译器写入一个1474650(1440*1024)字节大小的磁盘映像文件

2. 体验汇编程序

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
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

RESB(reserve byte):从现在开始的地址空出指定字节数,并自动填0

将helloos.nas文件编译为helloos.bin文件

3. 润色后的汇编程序

; 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

41行:启动区末尾固定格式55aa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lor :)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值