自学操作系统

day1

操作过程

说明:windows10 操作系统下

1,就这一点

把这个文件夹复制出来到当前目录。
在这里插入图片描述

进入tolset,添加helloos03
在这里插入图片描述

在文件夹中先放!cons_nt.bat,这个bat的作用就是在当前目录下打开cmd。

helloos03.img 是通过nask.exe编译hellloos03.nas得到。

之后再创建run.bat,内容是这个

copy helloos03.img ..\z_tools\qemu\fdimage0.bin
..\z_tools\make.exe -C ../z_tools/qemu

其操作就是把helloo03.img复制成fdimage0.bin放进qemu里面,qemu是一个软盘模拟器,通过这个软件执行就是再执行fdimage0.bin中的程序了。第二行的make是执行qemu目录下的makefile,makefile里面是指明运行qemu-win.bat,这个批处理文件中内容是:

@set SDL_VIDEODRIVER=windib;设置qemu的相关变量...
@set QEMU_AUDIO_DRV=none
@set QEMU_AUDIO_LOG_TO_MONITOR=0
qemu.exe -L . -m 32 -localtime -std-vga -fda fdimage0.bin

意思是通过qemu.exe把fdimage0.bin拉起来,fdimage0.bin就相当于录制好了的操作系统文件。再qemu.exe上跑了起来。


具体描述

代码

接下来讲讲代码。

ORG 0x7c00		;指明程序的装载地址

	mov ax,0			; 初始化 寄存器
	mov ss,0			; ss寄存器,设置成0
	mov sp,0x7c00		; sp栈指针,设在程序装载区最开始的地方,这样做我觉得不对,不过现在程序没有跑
	mov ds,ax			; ds数据寄存器
	mov es,ax			; es段寄存器
	
	mov si,msg			; si源变地址寄存器。  把msg的内存区域都读过来
				
						; 啊我待会得去把汇编寄存器给复习一下

putloop:				; 这是循环输出的
	mov al,[si]			; 从msg 里面读取数据
	add si,1			; si寄存器 + 1
	cmp al,0			; 是不是0,是就跳出去
	
	je fin
	
	; 这是显示函数的标准写法
	mov ah,0x0e			; 不等于就这里,把0x0e放在高位
	mov bx,5			; 这里是搞个颜色
	int 0x10			; 调用显示中断,这个中断再bios里面的
	jmp putloop			; 循环写入

fin:
	hlt
	jmp fin
	
msg:
	db 0x0a, 0x0a
	db "hello,world"
	db 0x0a
	db 0
	
	RESB	0x7dfe-$		; 从后面一直到这里,全部写0
	DB		0x55, 0xaa		; 必须 0x, 0x55aa 

如上代码,注释也写的很清楚,接下来说下代码的含义与及一些需要明白的小知识点。

第一段代码,意义在于初始化需要用的寄存器,清零的清零,设值的设值。

第二段代码,指定位置msg处,读hello,world

第三段代码,调用 10 号中断,展示对应的字符。

第四段代码,循环阻塞住,展示不退出。

第五段代码,msg,要展示的数据区。

第六段代码,填零,启动区标志。

需要知道的基本常识

在汇编中,中断的调用的时候需要设置相关的寄存器,因为执行的中断会去对应的寄存器中读取值,类似于函数传参。
操作系统中bios执行完毕以后,会去找到0x7c00位置开始执行。在加载主驱动区的时候比那辨别最后的位置是不是0x55aa,如果是就认为他是bios需要加载的引导区。如果不是,bios就不认为他是需要的启动区,因此,这块区域的最后需要写成0x55aa。


如果有错,欢迎指出。

邮箱:ningmonguo@foxmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值