2011年4月26日

利用0E820h int 15h 中断获取内存信息********

摘要: 利用0E820h int 15h 中断获取内存信息; 得到内存数 //这段代码是在实模式下写的。movebx, 0movdi, _MemChkBuf.loop:moveax, 0E820hmovecx, 20movedx, 0534D4150hint15hjcLABEL_MEM_CHK_FAIL//如果产生进位,则跳转。产生进位表示没有成功。adddi, 20incdword [_dwMCRNumber]cmpebx, 0//ebx存放的是下一个ARDS的偏移量,第一个是0,如果ebx重新变为0,说明已经到最后一个ARDS了,遍历结束了。jne.loop //这样[_dwMCRNumber]就 阅读全文

posted @ 2011-04-26 22:33 wanghj_dz 阅读(919) 评论(0) 推荐(0) 编辑

pmtest6.asm代码详细解释,对分页的形成过程有详细的解释

摘要: ; ==========================================; pmtest6.asm; 编译方法:nasm pmtest6.asm -o pmtest6.com; ==========================================%include"pm.inc"; 常量, 宏, 以及一些说明PageDirBaseequ200000h; 页目录开始地址:2MPageTblBaseequ201000h; 页表开始地址:2M + 4Korg0100hjmpLABEL_BEGIN[SECTION .gdt]; GDT; 段基址, 段界 阅读全文

posted @ 2011-04-26 13:51 wanghj_dz 阅读(1034) 评论(0) 推荐(0) 编辑

自己对分页机制的认识

摘要: 终于有点搞明白分页机制:其实32位组成的线性地址是虚拟地址,范围是从00000000H~FFFFFFFFH一共4Gcr3决定了页目录基址,线性地址的高十位是页目录项索引值,然后读取页目录项的高20位,得到页表的基址。在与线性地址的中10位形成的偏移值,找到页表项,然后读取页表项的高20位形成页基址,再加上线性地址的低12位形成物理地址。启动分页时,先要建立含有PDE,PTE的表格。这个表格含有1024个PDE,1024*1024个PTE。cr3寄存器的低12位都是0,不起作用,高20位是页目录基址。它保存的是当前活动进程的页目录地址。这张图片结合http://www.cnblogs.com/w 阅读全文

posted @ 2011-04-26 08:52 wanghj_dz 阅读(625) 评论(0) 推荐(0) 编辑

导航