前言
上一篇文章,我们使用C++来简单模拟了分页机制,现在我们来看汇编代码,看看其如何来构建汇编代码的,这里如果新手可能会犯糊涂,很久之前我被这份代码搞晕了好久,现在来一起解释一下。
页表构建代码分析
代码如下,在《x86/x64体系探索及编程》的ex11-2\protected.asm中,来负责初始化页表。
;---------------------------------------------
; init_32bit_paging(): 建立 32-bit paging 环境
;---------------------------------------------
init_32bit_paging:
; 1) 0x000000-0x3fffff 映射到 0x0 page frame, 使用 4M 页面
; 2) 0x400000-0x400fff 映射到 0x400000 page frame 使用 4K 页面
;; PDT 表物理地址设在 0x200000 位置上, PT表物理地址在 0x201000位置上
; 1) 设置 PDT[0](映射 0 page frame)
mov DWORD [PDT32_BASE + 0], 0000h | PS | RW | US | P ; base=0, PS=1, P=1,R/W=1,U/S=1,
; 2) 设置 PDT[1]
; PT表的地址在0x201000位置上,设置为supervisor,only-read 权限
mov DWORD [PDT32_BASE + 1 * 4], 201000h | P ; PT base=0x201000, P=1
; 3) 设置 PT[0](映射