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

; 测试分页机制 --------------------------------------------------------------
PagingDemo:
  mov ax, cs
 mov ds, ax
 mov ax, SelectorFlatRW       ;这应该是selectorFlatRW所对应的段描述符的首地址,参见pmtest7.asm
 mov es, ax

 push LenFoo          ;0x0000001c                 sp:0x000001f7
 push OffsetFoo       ;0x000001a0                 sp:0x000001f3
 push ProcFoo         ;ProcFoo equ 00401000h   sp:0x000001ef
 call MemCpy          ;前面几个push是MemCpy的参数,sp:0x000001eb,call会由系统自动压入参数,sp要加4。这段call的功能是把程序拷贝到ProcFoo处
 add esp, 12             ;esp:0x000001fb,见lib.inc ,168行.

 push LenBar          ;0x0000001e                 sp:0x000001f7
 push OffsetBar       ;0x000001bc
 push ProcBar         ;0x00501000
 call MemCpy          ;这段call的功能是把程序拷贝到ProcBar处
 add esp, 12

 push LenPagingDemoAll        ;0x00000008
 push OffsetPagingDemoProc    ;0x00000198
 push ProcPagingDemo          ;0x00301000
 call MemCpy                  ;这段call的功能是把程序拷贝到ProcPagingDemo处
 add esp, 12

 mov ax, SelectorData           ;0x0030
 mov ds, ax   ; 数据段选择子
 mov es, ax

 call SetupPaging  ; 启动分页
   
 call SelectorFlatC:ProcPagingDemo  ; ; call far 0010:00301000

                                                       ;跳到PagingDemoProc处,

                                                       ;执行mov eax, LinearAddrDemo   ;LinearAddrDemo equ 00401000h    ,ProcFoo equ 00401000h
                                                       ;call eax   ,执行foo函数

 call PSwitch   ; 切换页目录,改变地址映射关系

 call SelectorFlatC:ProcPagingDemo        ; call far 0010:00301000

                                                         ;跳到PagingDemoProc处,

                                                         ;执行mov eax, LinearAddrDemo   ;LinearAddrDemo equ 00401000h    ,ProcFoo equ 00401000h
                                                         ;call eax     ,执行bar函数

 ret        

补充:selectorRW和SelectorFlatC所指向都是同一个段,段基地址0,段界限为4G,只是属性不一样。其实段基址0不起作用,起作用的还是偏移量,偏移量就代表了地址。Call MemCpy需要数据的读写,所以用SelectorRW,Call SelectorFlatC:ProcPagingDemo是代码的执行,所以用SelctorFlatC。

posted on 2011-05-09 10:06  wanghj_dz  阅读(458)  评论(0编辑  收藏  举报

导航