《自制操作系统》第3天:32位模式 和 开始使用C语言

汇编语言:

  • JC: Jump if carry, 如果进位标志是1,就跳转
  • JNC:Jump if not carry,如果进位标志是0,就跳转
  • JAE:Jump if above or equal,大于或等于时,就跳转
  • JBE:Jump if below or equal,小于或等于时,就跳转
  • JB: Jump if below,小于时,就跳转
  • EQU:在程序开头时用,相当于#define宏定义
  • RET:return,与C语言的return作用一样

 

软驱读盘顺序:

  1. 读18个扇区(sector)
  2. 切换另一面磁头继续读(header)
  3. 切换柱面,从第1个扇区开始读(cylinder)

 

段寄存器:

  • 来源:设计BIOS的时代,CPU还没有32位内存,所以为了支持更大的内存,就做出段寄存器
  • 作用:使用ES:BX来计算内存地址,ES * 16 + BX
  • 注意:其实不管我们指定内存的什么地址,都必须指定段寄存器,这是规定。一般如果省略的话默认为“DS:”寄存器。因为有了这个规定,所以一般DS要预先指定为0
  • 例子:MOV AL, [DS:SI] 可省略为 MOV AL, [SI]

使用EBX,最大支持内存扩展到4G

 

VRAM

  • 显卡内存(Video RAM),可以和一般内存一样存储数据。不仅如此,它的各个地址对应着画面的像素。

 

操作系统的设计

  • 架构的变化:把IPL和操作系统分成两个文件
  • 32位模式:指的是CPU模式,与16位模式机器语言代码不一样。即使是同样的机器语言,解释的方法也不一样。所以两种模式的机器语言不能互相运行。32位模式下能使用CPU自我保护功能,但不能调用BIOS功能了,因为BIOS是用16位机器语言写的。所以想使用BIOS的事情,全部放在开头。

 

C语言

  • main函数之前的函数声明:告诉编译器,有一个函数在别的文件里

 

C语言的局限

  • 目标文件(机器语言文件)还要与其他文件链接后才能变成可执行的机器语言,这是C语言的一个缺陷。

 

C语言与汇编语言的混用

  • 参照P62
posted @ 2014-03-04 22:54  吉吉的轨迹  阅读(531)  评论(0编辑  收藏  举报