orange's一个操作系统的实现--学习过程 第三章:a 为什么需要认识IA32架构IntelCPU保护模式

版权声明:原创作者:http://blog.csdn.net/port23 。 欢迎讨论转载,请注明来源: https://blog.csdn.net/port23/article/details/81272274

第三章主要是讲IA32架构IntelCPU的相关内容,因为只有了解了CPU的一些特性,才能够写出操作系统,这也是操作系统为什么和硬件CPU有关系的原因。同样也是因为只是为了了解CPU的特性,第三章主要就是通过汇编代码去熟悉这些特性,因此借助DOS去执行也无妨。

从汇编源码编译成执行文件,所有变量和地址都是按照线性地址编译出来的。虽然实模式和保护模式的寻址方法不一样,但是只要他们计算的线性地址结果是一样的,那获取的内容也就是一样的。保护模式的优势就是通过分段的方法(即段式存储机制)与汇编源码的SECTION可以对应起来,从汇编源码的编写角度来看就简单了很多。

从汇编源码生成的执行程序是一个纯二进制文件,就是程序执行的内存影像和二进制文件是一样的。并且执行程序文件的汇编指令是按照线性地址一直排下去的。执行程序在内存的起始线性地址是按照约定放置的,例如com文件起始地址是0100h。执行程序的数据段地址可以是通过源码设置的。


汇编程序可以选择2种执行方式

(1,在虚拟机直接执行,要求编译出来的程序不能大于512字节;显然通过2,在DOS环境下执行更好一些)
(我这里使用DOSBox的环境,没有使用虚拟机的FreeDos,不需要通过linux把二进制程序复制到软盘上让FreeDos去识别)


1,在虚拟机直接执行  
按照起始地址org    07c00h编译成二进制程序,复制到引导软盘下,在虚拟机下开机执行。
nasm pmtest1.asm -o pmtest1.bin
dd  if=pmtest1.bin  of=a.img  bs=512  count=1  conv=notrunc


2,在DOS环境下执行
按照起始地址org    0100h编译成二进制程序,直接在DOS下执行即可。
nasm pmtest1b.asm -o pmtest1.com 
在DOS环境下执行 pmtest1.com 
 

猜你喜欢

转载自blog.csdn.net/port23/article/details/81272274