您的位置:首页 > 编程语言 > C语言/C++

30天自制操作系统笔记-第三天-开始导入C语言

2016-11-19 11:27 337 查看
30天自制操作系统笔记-第三天-开始导入C语言
在30天自制操作系统中,第3天中,加入C语言部分,但是关于c语言如何变成机器代码的过程,我并没有理解清晰,所以在这里整理一下,希望大家批评指正。
 
1、Bootpack.c->bootpack.gas
通过cc1编译器,变成gas汇编语言对应代码。
.file "bootpack.c"
.text
.balign 2
.globl _HariMain
.def _HariMain; .scl 2; .type 32; .endef
_HariMain:
pushl %ebp
movl %esp, %ebp
L2:
jmp L2
2、Bootpack.gas->bootpack.nas
通过gas2nask.exe,实现从gas汇编语言到nask汇编器支持的汇编语言。
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[FILE "bootpack.c"]
[SECTION .text]
GLOBAL _HariMain
_HariMain:
PUSH EBP
MOV EBP,ESP
L2:
JMP L2
可以看到,gas汇编语言和nask汇编器支持的汇编语言只是形式上有所差别,主体内容基本一一对应。
3、Bootpack.nas->bootpack.obj  
通过nask.exe编译器。生成目标代码。Obj中除了bootpack.c中的代码对应的机器码外,还有其他类型的调试信息。这个通过bz.exe打开bootpack.obj即可以看到,特别是bz.exe中右侧显示的ASCII码对应的字母中,含有“data”“text”等字符串,很明显为信息交换使用的部分。
从bootpack.lst中可以看到c程序语句对应的机器码为55 89 E5 EB FE。如下所示。
     8 00000000                                  GLOBAL _HariMain
     9 00000000                                 _HariMain:
    10 00000000 55                               PUSH EBP
    11 00000001 89 E5                            MOV EBP,ESP
    12 00000003                                 L2:
    13 00000003 EB FE                            JMP L2
 
4、Bootpack.obj->bootpack.bim  
通过obi2bim.exe,生成bim
完成链接的过程。链接过程需要链接一些相关的代码。因为单凭C语言无法完成所有的程序的。
 
可以看到bim中有55 89 E5 EB FE,
同时bim中还有其他相关的代码。
5、bootpack.bim->bootpack.hrb
通过本书作者编写的bim2hrb.exe,可以使bim格式的文件转换为hrb格式的文件。之所以有这一步,是因为要和本书作者编写的操作系统相适应。
 
可以看到bim文件和hrb文件主题内容基本一致,开头内容有些许差别。
6、asmhead.bin+bootpack.hrb=haribote.sys
  将bootpack.hrb的内容简单的添加到asmhead.bin后面就得到了haribote.sys的代码。而haribote.sys代码的作用(截止到书中的harib00i),就是通过调用BIOS中的中断,显示屏幕为全黑,并将画面模式中的信息保存在了系统的内存里面,具体包括颜色数目,分辨率,LED指示灯的状态等。
 
 
 
这里,打开harib00h中的haribote.sys,查看其中的代码如下:
 
再打开harib00i中的haribote.sys,查看其中的代码如下:

 
可以看到两者开头的内容一致,中间部分是本书作者为了引入c语言而产生的代码,最后一部分是c语言产生的机器代码。中间部分是如何作用的,等着学了之后的内容,再进行总结吧。本文就到这里,希望大家批评指正。

 
 
 

 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: