Advertisement

《30天自制操作系统》 day3 小结

阅读量:

前面部分还是正常的汇编编译模式:

JC:jump if carry,如果进位标识(carry flag)是1的话,就跳转。

INIT 0x13 是调用BIOS的0x13号函数。是系统复位。

以下是按照给定规则对原文的改写

FLACS .CF中的进位标志
该进位标志仅能保存一位二进制数据。
这种一位的寄存器通常被称作标志flag。

含有IPL的启动区位于C0-H0-S1(柱面0,磁头0,扇区1的缩写),下一个扇区是C0-H0-S2

缓冲区地址属于内存地址范畴,在软盘数据被加载至系统运行时自动转换为此类存储位置。

0x8000~0x81ff 这512字节是留给启动区的,所以一般设置ES=0x0820,BX=0

JNC: 当无进位(carry is 0)时执行跳跃指令。
JAE: 当操作结果大于或等于某个值(通常记作+)时执行跳跃。
JBE: 当操作结果小于或等于某个值(通常记作+)时执行跳跃。

VRAM即为显卡所使用的内存。它类似于用于显示画面的那一部分内存。它不仅能够如同内存般地存储数据,并且每个地址都精确对应画面上特定像素的位置,在这种情况下,在画面上就能呈现出多样的色彩与细节效果。

INT 0x10 画面模式下“VRAM是0xa0000~0xaffff的64KB”


开始导入C语言部分

在书中,作者用了他的办法将c语言编程机器语言也就是汇编语言:

工具 作用 输入 输出
cc1 gcc以gas汇编语言为基础,输出gas用的源程序 .c .gas
gas2nask 把gas变换成nask能翻译的语法 .gas .nas
nask 翻译成机器语言,生成目标文件.obj .nas .obj
obi2bim 目标文件需与其他文件link才能编程真正可以执行的机器语言,bim是二进制映像文件,是一种代替的形式 .obj .bim
bim2hrm 为了能够实际使用,要做成适合本书操作系统要求的形式 .bim .hrb

完成步骤耗时较多的原因在于采用了基于GCC的一个较为基础的编译器。该编译器的设计理念是基于其能够兼容各种不同的操作系统位,并且在内部实现上并未设置任何隐藏机制。特别会生成大量中间文件。仅凭这一编译器即可生成适用于Windows、Linux以及OSASK的操作系统版本的可执行文件。

基于上述内容中使用的源代码管理工具Makefile也进行了重大修改,并将其拆解为直观的视觉化工作流程图有助于更好地理解整个系统的工作逻辑

Makefile

作者对hlt这个函数热衷于研究啊,于是他编写了一个hlt实现函数(文件名:naskfunc.nas)。由于随后需要将bootpack.obj连接到项目中,因此必须将其编译为目标文件。因此作者将输出格式配置为WCOFF模式,并将之设置为32位机器语言模式。

在nask目标编译方式下,需要声明或指定文件名信息,并同时需说明该程序各函数的名称。为了确保与C语言函数顺利连接,“_”前需将函数名称加载。所有需要连接的函数名称都应使用GLOBAL指令进行声明。随后,在C程序中调用该函数即可实现对HLT功能的使用。

全部评论 (0)

还没有任何评论哟~