《30天自制操作系统》第一天

一、先动手操作

1、使用Bz二进制编译器编写HelloWorld

此文件正好是1474560字节

附带光盘中的tolset文件夹,找硬盘任意一个位置存放着。在tolset文件夹中新建一个文件夹,命名为“helloos0”,并且把前面保存的映像文件helloos.img复制进来。并且把tolset文件夹中名为z_new_w的子文件夹中的!cons_9x.bat和!cons_nt.bat这两个文件也复制进来。

接着,在helloos0中,新建一个文本文件,命名为run.bat,然后输入以下:

run.ba

copy helloos.img ../z_tools/qemu/fdimage0.bin
..¥/z_tools/make.exe -C ../z_tools/qemu

按照同样的步骤,创建install.bat

install.bat

.. ¥/z_tools/imgtol.com w a:helloos.img

因为没有软盘,可以直接使用笔者的模拟器,双击!cons_9x.bat和!cons_nt.bat中的某一个(我的电脑是双击!cons_nt.bat这个),然后输入run即可。

当然还可以使用电脑的软件模拟器。

二、究竟做了什么

1、CPU:中央处理器

CPU只会交换电信号,能看见的就只有开(ON)和关(OFF)电信号,电信号可以和二进制数相互转换,最后变成二进制数计算机。

三、初次体验汇编程序

使用DB指令和RESB指令,写出正常长度的源代码后,源代码名叫"helloos.asm",笔者做了个批处理文件asm.bat。只需要打开!cons后,在命令行窗口中输入asm,就可以生成 .img文件了。在用"asm"作成img文件后,再执行"run"指令,就可以的到Helloworld了。

DB指令:往文件里直接写入1个字节的指令

RESB指令:想要从现在的地址开始空出来10个字节,就可以写成RESB 10,意思是我预约了这10个字节。

四、加工润色

; 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

以上代码的新内容:

'';''命令:这是个注释命令

DB指令:可以直接用来写字符串

DW指令:data word ,2个字节

DD指令:data double-word ,4个字节

RESB 0x1fe-$中的$:这是一个变量,可以告诉这一行的字节数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值