段的起始地址用32位来表示,被称为段的基址,在本书中被分成了3段,分别为2字节、1字节、1字节。之所以这么做,主要是为了与80286时代的程序兼容。有了这样的规格,80286用的操作系统,也可以不用修改就在386以后的CPU上运行了。
在电脑的CPU里,1页是指4KB
CPU有“系统模式”和“应用模式”之分。
在设计上,CPU只能单独处理一个中断。
使用中断之前要进行PIC的初始化, PIC是将8个中断信号集合成一个中断信号的装置。它监视着输入管脚的8个中断信号,只要有一个中断信号进来,就将唯一的输出管脚变成ON并通知CPU。
IBM的开发者们曾认为电脑会有8个以上的外部设备,所以增设了两个PIC,分别为master和slave。具体连接方式如图:
有一点值得注意,主PIC不通知给CPU,从PIC的意思也就不能传达给CPU。
说说缓冲区:
写程序的时候,经常会有这种需求——虽然不用永久记忆,但需要暂时记住某些东西以便后用。这种目的的记忆称为缓冲区。下面有两种缓冲区, 其实就是数据结构课里讲的栈和队列
汇编指令PUSHAD相当于:
PUSH EAX
PUSH ECX
PUSH EDX
PUSH EBX
PUSH ESP
PUSH EBP
PUSH ESI
PUSH EDI
POPAD指令则是正好相反的,但凡是被PUSHAD给push进去的,都会被它给POP出来
将寄存器的值保存到栈里,原因在于中断发生在函数处理的途中,通过IRETD从中断处理返回以后,如果寄存器的值乱了,函数就无法正常处理下去了。所以一定要让寄存器的值返回到中断处理前的状态。
汇编指令CALL是用来调用函数的,在naskfunc.nas中,要调用没有定义在naskfunc.nas中的函数,因此出现了:
EXTERN _inthandler21, _inthandler27, _inthandler2c
这是为了通知nask:“它在别的源文件里”
执行STI指令后,IF(中断许可标志位)变为1。CPU的中断信号只有一根吗,所以IF也只有一个。