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。

转载于:https://www.cnblogs.com/wanghj-dz/archive/2011/05/09/2040870.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值