30天自制操作系统day3-HLT实现

来源:互联网 发布:天刀真武男捏脸数据 编辑:程序博客网 时间:2024/05/22 02:03

30天自制操作系统day3-HLT实现

本书作者引入C语言的原因:
1、本书作者使用了32位的编译器。
2、CPU在32位模式下,CPU具有自我保护功能(能够识别出可疑的机器语言)。
3、CPU在32位模式下使用的内存容量远远大于1MB。

使用c语言调用汇编程序中的代码
下面为汇编语言写出的HLT函数。通过这个函数说明了几点问题:
1、c语言中没有hlt函数,所以单独使用c语言无法实现所有的程序功能,需要辅以汇编语言。而链接的过程就能够较好地弥补这个过程。将汇编语言的代码和c语言的代码合成一个机器语言文件(bim或者hrb)
2、C语言可以调用汇编语言中的代码。
3、在c语言调用汇编程序中,可以看到函数名io_hlt其实质就是一个地址,该地址是HLT函数第一条指令开始的地方。

C语言如何调用汇编语言:

1、使用汇编语言编写函数代码
函数代码的具体形式如下
; naskfunc
; TAB=4
[FORMAT “WCOFF”] ;制作目标文件的模式
[BITS 32] ;制作32位模式用的机械语言
[FILE “naskfunc.nas”] ;源文件名信息
GLOBAL _io_hlt ;程序中包含的函数名
[SECTION .text] ;目标文件中写了这些之后载写程序
_io_hlt: ; void io_hlt(void);
HLT
RET
生成的lst文件如下:
这里写图片描述
可以看到,[]中的内容并没有转换成机器码,而是作为编译器编译的相关信息出现。但是在生成的obj文件中除了F4 C3还有很多其他的信息,可以从右侧的字符串中看到,有naskfunc.nas、_io_hlt、text、data等信息,很明显是作为链接时,交换信息使用的。

所以可以说汇编程序中[]中的内容非常重要,其直接关系到obj文件的链接。
2、生成obj文件
使用nask.exe生成obj文件

3、链接
bootpack.obj

这里写图片描述

naskfun.obj
这里写图片描述
上述2者,链接为bootpack.bim
这里写图片描述
其中55 89 E5 E8 02 00 00 00 EB F9为bootpack指令的机器码,F4 C3为naskfunc的指令机器码。其他不详。

注意这里55 89 E5 E8 02 00 00 00 EB F9中E8 02 00 00 00 表示向后跳转2个字节。就调换到了F4 C3这里。这里就相当于对HLT函数的调用。

0 0