2011年5月10日

中断与异常机制

摘要: 我们在说到中断通常将它与异常相提并论,实际上它们都是程序执行过程中强制性转移,转移到相应的处理程序。中断通常在程序执行时因为硬件而随机产生,他们通常用来处理处理器外部的事件。异常则通常在处理器执行指令过程中检测到错误时发生,比如遇到零除的情况。处理器检测的错误条件有很多,比如保护违例、页错误等。假设处理器可以处理A、B、C三种中断(异常),分别进行a,b,c三种处理,我们得有一种方法把A、B、C与a、b、c对用起来,实际上解决这个问题的方法就是我们前面提到的中断向量。每一种中断和异常都会对应一个中断向量号,而这个向量号通过IDT就与相应的中断处理程序对应起来。Fault,Trap和Abort是 阅读全文

posted @ 2011-05-10 08:57 wanghj_dz 阅读(587) 评论(0) 推荐(0) 编辑

2011年5月9日

(Pmtest8.asm总结)PagingDemoProc 注意这个这个程序段使用的是LinearAddrDemo线性地址。分页后线性地址要转换

摘要: PagingDemoProc:OffsetPagingDemoProcequPagingDemoProc - $$moveax, LinearAddrDemo ;LinearAddrDemo equ 00401000h ,ProcFoo equ 00401000hcalleax ;跳到foo处执行代码retfLenPagingDemoAllequ$ - PagingDemoProc设计一个Flat段,尽管他的基址为0,这样做的好处是逻辑很清楚,只要用到这个段名,他们涉及到的代码和数据就都在这个段里。这样逻辑就不会混乱。moveax, LinearAddrDemo ;LinearAddrDemo 阅读全文

posted @ 2011-05-09 17:06 wanghj_dz 阅读(425) 评论(0) 推荐(0) 编辑

自己动手写操作系统P121 对SelectorFlatRW和SelectorFlatC的描述

摘要: 事实上,在pmtest7.asm中我们用两个段分别存放页目录表和页表(LABEL_DESC_PAGE_DIR存放页目录表,LABEL_DESC_PAGE_TBL存放页表)是为了让读者阅读时更加直观和形象。在pmtest8.asm中,我们把它们放到同一个段中,同时把增加的一套页目录和页表也放到这个段中。为了操作方便,我们新增加一个段FLAT,其线性地址空间为0-4GB。由于分页机制启动之前线性地址等同与物理地址,所以通过这个段可以方便地存取特定的物理地址。此段的定义如下:LABEL_DESC_FLAT_C: Descriptor 0,0fffffh,DA_CR|DA_32|DA_LIMIT_4K 阅读全文

posted @ 2011-05-09 15:04 wanghj_dz 阅读(467) 评论(0) 推荐(0) 编辑

pmtest8.asm 全

摘要: ; ==========================================; pmtest8.asm; 编译方法:nasm pmtest8.asm -o pmtest8.com; ==========================================%include"pm.inc"; 常量, 宏, 以及一些说明PageDirBase0equ200000h; 页目录开始地址:2MPageTblBase0equ201000h; 页表开始地址:2M + 4KPageDirBase1equ210000h; 页目录开始地址:2M + 64KPageTblB 阅读全文

posted @ 2011-05-09 14:25 wanghj_dz 阅读(579) 评论(0) 推荐(0) 编辑

pmtest8.asm中的PSwitch代码的理解

摘要: ; 切换页表 ------------------------------------------------------------------PSwitch:; 初始化页目录movax, SelectorFlatRWmoves, axmovedi, PageDirBase1; 此段首地址为 PageDirBase1 ,PageDirBase1 equ210000h; xoreax, eaxmoveax, PageTblBase1 | PG_P | PG_USU | PG_RWW movecx, [PageTableNumber].1:stosdaddeax, 4096; 为了简化, 所有页 阅读全文

posted @ 2011-05-09 11:10 wanghj_dz 阅读(1122) 评论(0) 推荐(2) 编辑

pmtest8.asm中对PagingDemo程序段的理解

摘要: ; 测试分页机制 --------------------------------------------------------------PagingDemo:movax, csmovds, axmovax, SelectorFlatRW ;这应该是selectorFlatRW所对应的段描述符的首地址,参见pmtest7.asmmoves, axpushLenFoo ;0x0000001c sp:0x000001f7pushOffsetFoo ;0x000001a0 sp:0x000001f3pushProcFoo ;ProcFoo equ00401000h sp:0x000001efca 阅读全文

posted @ 2011-05-09 10:06 wanghj_dz 阅读(456) 评论(0) 推荐(0) 编辑

pmtest8.asm中lib.inc中MemCpy代码的理解

摘要: PagingDemo:movax, csmovds, axmovax, SelectorFlatRW ;这应该是selectorFlatRW所对应的段描述符的首地址,参见pmtest7.asmmoves, axpushLenFoo;0x0000001c sp:0x000001f7pushOffsetFoo ;0x000001a0 sp:0x000001f3pushProcFoo ;ProcFoo equ00401000h sp:0x000001efcallMemCpy;前面几个push是MemCpy的参数,sp:0x000001eb,call会由系统自动压入参数,所以前面的sp要加4。;这段c 阅读全文

posted @ 2011-05-09 10:04 wanghj_dz 阅读(569) 评论(0) 推荐(0) 编辑

2011年5月8日

pmtest7.asm中 SetupPaging 启动分页代码,根据内存确定页表数。

摘要: SetupPaging:; 根据内存大小计算应初始化多少PDE以及多少页表xoredx, edxmoveax, [dwMemSize]movebx, 400000h; 400000h = 4M = 4096 * 1024, 一个页表对应的内存大小divebxmovecx, eax;此时 ecx 为页表的个数,也即 PDE 应该的个数testedx, edxjz.no_remainderincecx; 如果余数不为 0 就需增加一个页表.no_remainder:pushecx;暂存页表个数; 为简化处理, 所有线性地址对应相等的物理地址. 并且不考虑内存空洞.; 首先初始化页目录movax, 阅读全文

posted @ 2011-05-08 09:04 wanghj_dz 阅读(385) 评论(0) 推荐(0) 编辑

2011年5月7日

LODS,LODSB,LODSW,LODSD 和 STOS,STOSB,STOSW,STOSD 的作用

摘要: LODS,LODSB,LODSW,LODSD 和 STOS,STOSB,STOSW,STOSD 的作用 LODSB LODSW LODSD 将字符串装入累加器(Load Accumulator from string) 将由DS:E(SI)寻址的一个内存字节或字装入累加器(AL, AX 或 EAX)中,如果使用LODS,必须 指定内存操作数.LODSB将一个字节装入AL,LODSW将一个字装入AX.IA-32处理器的LODSD将一 个双字装入EAX.(E)SI根据操作数大小和方向标志值自动增减.如果方向标志(DF)=1,ESI增 加,如果DF=0,ESI减少 摘自INTEL汇编语言程序设计(第 阅读全文

posted @ 2011-05-07 22:19 wanghj_dz 阅读(1291) 评论(0) 推荐(0) 编辑

2011年5月5日

pmtest7.asm中 DispMemSize:代码的解释

摘要: DispMemSize:push esipush edipush ecxmov esi,MemChkBuf//esi=7amov ecx,[dwMCRNumber]; for(inti=0;i<[MCRNumber];i++)//每次得到一个ARDS ecx=6 ,.loop: ; {mov edx,5 ; for(intj=0;j<5;j++)//每次得到一个ARDS中的成员edx=5 mov edi,ARDStruct ;{//依次显示BaseAddrLow,BaseAddrHigh,LengthLow,LengthHigh,Type.1: ;push dword[esi] ; 阅读全文

posted @ 2011-05-05 22:03 wanghj_dz 阅读(401) 评论(0) 推荐(0) 编辑

导航