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

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文件主题内容基本一致,开头内容有些许差别。

6asmhead.bin+bootpack.hrb=haribote.sys

  bootpack.hrb的内容简单的添加到asmhead.bin后面就得到了haribote.sys的代码。而haribote.sys代码的作用(截止到书中的harib00i),就是通过调用BIOS中的中断,显示屏幕为全黑,并将画面模式中的信息保存在了系统的内存里面,具体包括颜色数目,分辨率,LED指示灯的状态等。

 

 

 

这里,打开harib00h中的haribote.sys,查看其中的代码如下:

 

再打开harib00i中的haribote.sys,查看其中的代码如下:

 

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

 

 

 


 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值