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) 编辑

导航