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

作者说,写操作系统之前,要用汇编写底层,我也不懂汇编,下载了一个二进制编辑器,就开始照书猛敲代码

这前前后后照抄3遍,前两遍都是复制过头(00要复制到地址块16800才行),不小心复制过头了,电脑没有保存,任务冲突,没了;后一次是有一行抄错了(眼睛真不行了)

之后按照作者要求,命名为helloos.img 

之后按照作者要求来

复制!!cons-9x.bat(或!cons_nt.bat)这个文件,再拷贝run.bat和instal.bat(.bat和.cmd都是批处理文件的后缀,这个我自己写了,后来不成功,还是复制了光盘里面的东西),然后打开,在命令行输入run,一个叫QEMU的免费pc模拟器就会自动运行(我现在还不明白那个模拟器存在哪里,因为我没有去下载,但是输入run之后就会自动运行)。

多亏有模拟器,不然用软盘真是倒退啊! 

之后作者右讲了CPU,CPU就是个执行电信号,转成电信号,0,1嘛

之后作者运用汇编写程序

将helloos.nas文件复制到helloos0中,注意的是,要把z_tools也复制到tolse文件夹中,让helloos0等文件夹跟z_tools文件夹并列

输入

..\z_tools\nask.exe helloos.nas helloos.img得到helloos.img,之后再run

之后作者对汇编语言做再优化

 

 DB指令时“date byte”的缩写,也就是往文件里面直接写入一个字节的指令

RESB指令是“reserve byte”的缩写,在现地址后面空出10个字节来,我们就是写出RESB 10

作者说,在命令行输入asm,之后再输入run

asm.bat的功能是使用helloos1文件夹的同级文件夹z_tools文件夹下的nask.exe根据helloos.nas生成helloos.img。

run.bat的功能是复制当前生成的hellloos.img镜像文件,使用qemu运行。

 

; 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,直到0x00afe
 
		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

helloos2.nas不是使用定义机器码的形式,而是使用定义软盘扇区的形式,其中DW(Define Word)定义字,DD(Define Double word)定义双字。

其中hellloos2文件夹下的批处理文件与helloos1一样,我们双击运行!cons_nt.bat文件,输入asm,run,生成helloos2.img镜像,
效果与前两个相同

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值