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 阅读(441) 评论(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 阅读(472) 评论(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 阅读(591) 评论(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 阅读(1154) 评论(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 阅读(468) 评论(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 阅读(578) 评论(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 阅读(399) 评论(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 阅读(1364) 评论(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 阅读(421) 评论(0) 推荐(0)

pmtest7.asm中 DispInt (显示一个整数型)的代码解释,DispAL代码的解释

摘要: push dword[esi] ; //push [ds:0x7a],为0x00000000,注意这是指第一次压入堆栈的情况call DispInt //call指令会自动调用堆栈,esp会减4-------------------------------------------------------------------------------------;;显示一个整形数DispInt:mov eax,[esp+4]//注意这里esp+4是因为调入之前的call指令,因为call指令会自动把一些参数入栈,esp要减4,esp+4正好指向了第一次push进去的 0x00000000shr 阅读全文

posted @ 2011-05-05 21:56 wanghj_dz 阅读(624) 评论(0) 推荐(0)

导航