这一章主要说的是PC的软件环境:操作系统的功能和其主要组成部分,内容包括引导过程、系统是如何装入将要执行的程序、系统如何使用堆栈,以及爱代码段中一条指令是如何引用数据段中的数据。
BIOS引导过程:接通计算机电源的时候,会使处理器进入复位状态,把所有存储单元清除为0,完成存储器的奇偶校验,以及把CS寄存器设置成段地址FFFFH,并把IP寄存器设置成偏移值为0,。因此第一条执行的指令的地址是FFFF0H,是ROM中的BIOS的入口点。BIOS要建立两个数据区:中断向量表和BIOS数据区。中断向量表开始于0存储器的0单元并包含256个四字节地址,格式是段:偏移值。BIOS数据区开始于400单元,紧跟在中断向量表后面。下一步BIOS要确定磁盘是否包含现存的系统文件,如果有,它就要访问来自磁盘的引导装入程序。由这个程序把系统文件装入内存,并把控制权交给它们。系统文件包括设备驱动程序和其他硬件专用代码。
至于操作系统转入将要执行的程序的方法如下:
1、从磁盘上读取程序
2、在可用内存储器的一个小段边界上,构造一个256字节(100H)的程序段前缀(PSP)
3、紧随PSP的下一地址,把程序装入存储器中
4、把PSP的地址装入DS和ES
5、把代码段地址装入CS寄存器并把IP寄存器设置成代码段中第一条指令的偏移地址
6、把堆栈段地址装入SS并把SP设置成堆栈的大小
堆栈的用途主要有三点:
1、调用子程序的时候,堆栈中保存返回地址
2、调用子程序的程序可以把数据存放砸堆栈中来传递数据,子程序可以通过堆栈存取这些数据
3、程序要使用通用寄存器的时候,可以在堆栈中保存寄存器当前的内容
与堆栈有关的一些指令:
1、PUSHF和POPF保存和恢复标志的状态
2、PUSHA和POPA保存和恢复所有通用寄存器(AX CX DX BX SP BP SI DI)的内容
3、PUSHAD和POPAD保存和恢复所有扩充寄存器(EAX ECX EDX EBX ESP EBP ESI EDI)的内容