Bochs源码分析 - 23:页表构建的汇编分析

本文深入分析了x86/x64架构下页表的构建过程,通过汇编代码解释如何映射线性地址到物理地址,并详细介绍了设置寄存器以开启分页模式的操作,强调在开启分页模式前访问的是物理地址。同时,文章提供了一个用于自动化编译和构建的shell脚本。

前言

        上一篇文章,我们使用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](映射0x400000 page frame),设置为supervisor,only-read 权限
        mov DWORD [201000h + 0], 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值