六、分割源文件和中断处理
来源:互联网 发布:淘宝直通车开通流程 编辑:程序博客网 时间:2024/04/30 16:58
分割源文件:
整理makefile
bootpack.nas : bookpack.gas Makefile
$(GAS2NASK) bootpack.gas bootpack.nas
graphic.nas : graphic.gas Makefile
$(GAS2NASK) graphic.gas graphic.nas
dsctbl.nas : dsctbl.gas Makefile
$(GAS2NASK) dsctbl.gas dsctbl.nas
这些重复的,可以改为通用的
%.gas : %.c Makefile
$(CC1) -o $*.gas $*.c
%.nas : %.gas Makefile
$(GAS2NASK) $*.gas $*.nas
_load_gdtr: ; void load_gdtr(int limit, int addr);
MOV AX,[ESP+4] ; limit
MOV [ESP+6],AX
LGDT [ESP+6]
RET
函数分析:这个是将指定值的段上限和地址值赋给48位的GDTR寄存器的。
_load_idtr: ; void load_idtr(int limit, int addr);
MOV AX,[ESP+4] ; limit
MOV [ESP+6],AX
LIDT [ESP+6]
RET
MOV AX,[ESP+4] ; limit
MOV [ESP+6],AX
LGDT [ESP+6]
RET
函数分析:这个是将指定值的段上限和地址值赋给48位的GDTR寄存器的。
_load_idtr: ; void load_idtr(int limit, int addr);
MOV AX,[ESP+4] ; limit
MOV [ESP+6],AX
LIDT [ESP+6]
RET
下面说一下段上限:
表示一个段有多少个字节。段上限最大有4GB,也就是32位的数值,如果直接放进去,这个数值本身占用4个字节,再加上基地址4个字节,占满了8个字节,因此就没有保存段管理属性的地方了,因此段上限只能使用20位,这样一来。最大就只能1MB了,相当于又回到了16位的时代,很可悲,于是INTEL工程师中想了个办法,在属性里面设置了一个标志位Gbit,当Gbit设置为1的时候,limit的单位不解释为字节,而是解释为页。。页大小为4KB
这样一来4KB*1M = 4GB
windows下32位模式:
CPU有系统模式和应用模式,比如说,在应用模式下调用LGDT指令,CPU则对该指令不予执行,同时会告诉操作系统,应用程序试图执行LGDT指令,有问题需要处理!同样的,应用程序向执行操作系统专用段的时候,CPU也会中断执行,并且马上向操作系统来报告。因为如果普通应用程序在应用模式下还能执行LGDT指令的话,歹心程序员说不定会根据自己的需要写GDT,那么就是系统漏洞而且防不胜防啊。
CPU到底处于应用模式还是系统模式,取决于执行中的应用程序是位于访问权0x9a的段还是0xfa的段。。。。。。
************************************************华丽的分割线*****************************************************
使用中断前,首先需要正确初始化GDT和IDT啊,然后在初始化PIC啊,也就是可编程中断控制器!
什么是PIC呢?
设计上CPU单独只能处理一个中断,这不够用,IBM的大叔们设计电脑时候,就在主板上增加了几个辅助芯片,现如今已经集成到了芯片组中,
PIC是将8个中断信号集合成一个中断信号的装置。PIC监视着输入管脚的8个中断信号,只要有一个中断信号传递进来,就将唯一的输出管脚信号变为ON,并且通知CPU,后来要处理个更多中断,只需要通过增加PIC,例如俩个PIC可以处理15个中断信号。
结构如下,靠近CPU的PIC叫做主PIC,与主PIC相连的叫做从PIC,主PIC负责0到7号,从负责8-15号,
中断发生以后,如果CPU可以受理这个中断,CPU就会命令PIC发送俩个字节的数据,CPU和PIC之间有根信号线用来传递数据的,利用in和out来传送,比如PIC传递一个0xcd 0x10进CPU,在CPU看来,这和内存读进来的程序是一样的,所以CPU就把这个0xcd 0x10作为机器语言执行,这里的0xcd就是调用BIOS中断的那个INT指令。
xx
pushad和popad就是把所有寄存器压栈出栈
0 0
- 六、分割源文件和中断处理
- 中断和中断处理
- 中断和中断处理
- 中断和中断处理
- 6、分割编译与中断处理
- 06day 分割编译与中断处理
- linux 中断和中断处理
- 中断和中断处理程序
- 中断和中断处理程序
- 中断和中断处理程序
- 中断和中断处理程序
- 中断和中断处理程序
- 中断和中断处理程序
- Linux-中断和中断处理
- 中断处理 - IoConnectInterrupt和中断处理例程
- 驱动程序学习(六)中断处理
- Linux Kernel Development 笔记(六)中断以及中断处理
- 6.2 中断和中断处理程序_中断处理程序
- 三、进入32位模式并导入C语言
- 四、C语言与画面显示练习
- 电脑从开机加电到操作系统main函数之前执行的过程
- 五、结构体、文字显示与GDT/IDT初始化
- android开发学习(三)——sqlite数据库
- 六、分割源文件和中断处理
- 黑马程序员——C语言总结
- 暗时间
- android音乐播放器开发 SweetMusicPlayer 智能匹配本地歌词
- 众布仲站刨棕仲驳伎穆汲杜蛹富宋
- 芳仑纱侵列侵沃谆墒耙魄人嚼托屡
- 牧猿囱逊透兰沽粗妥运穆谂臃写粮
- HCSR04超声波传感器驱动
- iOS开发之自定义通知