谭升
非主流人工智能科学家 我和外面那些妖艳的货不一样

【30天自制操作系统】 中断处理

中断处理

我感觉中断处理应该是系统底层设计的关键,因为这是在控制硬件,和给c提供接口,如果接口搞不好,一路兵败如山倒。。。
分割编译其实就是c语言初等知识,就是别写的太乱,每个文件放不同的东西,头文件加以说明和声明,以及一些宏定义或者什么的,可以去查查相关c语言的资料。
今天让我纠结了一下午的东西在p113,也就是调整栈内容,用以组合出GDTR的48位数据那个地方,很纠结,现在来说明一下:
首先是c语言函数调用时参数传递问题,先从右边开始压栈,直到所有参数完成,但是在CALL的时候还要对CS:EIP进行压栈,这是个啥东西我也不清楚,所以我们可以看到取参数都从【ESP+4】开始取的,取参数的位置是【ESP+4】,【ESP+5】….取多少位就一直加加加。还有就是超过8位以上的数据在内存中存放的规律,如果是8位以下的一个内存单元就可以了,但要是16位32位呢,这就涉及到了大端机(Big-endian)和小端机(Little-endian)的区别了,首先我们以0x12345678为例,32的数据存储:

Center
就是高地址存高位还是低位的区别,不是很好理解,慢慢熟悉就好了,具体机器是大端还是小端写个c程序就行了,用一个联合来测试一下,具体自己发挥,《c语言深度解剖》有相关描述,好多书都提到过。
下面是113页困扰我很久的问题的具体解析:
Center 1
这就是那个GDT初始化函数调用时栈的内容,首先很纠结的就是栈底在高地址,栈是向下生长的,所以,看着很别扭,还有就是esp(栈顶指针)不是指向第一个参数的,剩下的问题就很好说了,如果要从内存0x02abf8读取两个字节,那么跟着0x2abf8后面的f9会被连带访问而不是f7。。。。。
接下来说PIC,这是个硬件,如果有点电路知识就应该没啥障碍了,是一个存储设备,cpu可以从他取数据,具体怎么去要看这个片子功能的设计和相关信号的传递方法,没有什么需要解释的,设计完全是为了便于开发。
中断程序的制作应该是核心问题,以及缓冲区的使用,明天再说。感谢收看,

Share

You may also like...

说点什么

avatar
  Subscribe  
提醒

由于博客移至wordpress,部分公式和代码显示不正常,博主正在努力修改,如发现公式显示错误,请及时在文章下留言,感谢您的帮助,尽请原谅!