实模式下寻址4G

实模式下寻址4G

标签: asm


以下实验均在bochs上进行。因为后来查到有big real mode,便没在真机上进行实验。

0x00 保护模式进入实模式时产生的问题

进行386cpu模式切换练习时,切换回实模式时没有设置合适的选择子,然后系统崩溃,重启。
对照了书上的代码,少了以下代码。

     mov ax, SELECTOR_REAL_MODE
     mov ss, ax
     mov ds, ax
     mov es, ax
     mov fs, ax
     mov gs, ax

其中SELECTOR_REAL_MODE对应的描述符为

LABEL_DESC_REAL_MODE:   DESCRIPTOR  0       , 0ffffh    , 092h

段的基址为0x0,段长度为0xffff,这与实模式的寻址方式相一致。

0x01 段寄存器高速缓冲区

在i386中,实模式和保护模式有不同的寻址方式。实模式类似于8086,段基址为段寄存器的内容乘0x10,范围固定为0xffff。保护模式则是通过选择子找到段描述符,根据段描述符的内容设置段的基址、范围。
原先我以为实模式和保护模式寻址是没有关系的。但经历过上面的错误,感觉二者之间有联系。保护模式下会将段描述符的内容装入段寄存器高速缓冲器,随后直接对高速缓冲区进行访问。实模式下或许存在类似的机制,不过段描述符的内容是计算出来的:段基址为段寄存器内容乘0x10,范围固定为0xffff。之后也在书上看到了类似的解释。
那么,如果实模式的寻址方式也是直接访问段寄存器高速缓冲区,只要设法修改段的范围,便能在实模式下访问4G内存(使用32位的寄存器作为偏移)。

0x03 验证:写大于0xfffff的地址。

程序流程:进入实模式,将所有段寄存器高速缓冲区设为基址为0,范围为4G,然后退回实模式。在实模式下向ds:0x100000的内存写入0x12345678。

此处输入图片的描述
图1中段寄存器的limit仍为0xffff。
此处输入图片的描述
图2中为程序运行结果。ds段寄存器的范围已修改为0xffffffff,写内存成功。

代码如下:
big_real_mode.asm

%include    "asm_struct.asm"
%include    "usually.asm"

    org 100h
    xchg bx, bx
    jmp start

[section .data]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
32位的寻址能力为什么是4G呢?这是因为32位系统的寻址范围是2的32次方字节,即4GB。\[2\]寻址能力是指CPU能够查找的地址范围大小,以字节为单位计算。32位寻址的CPU可以寻址2的32次方大小的地址,也就是4GB。\[3\]因此,32位操作系统最多能够使用4GB内存。\[1\]虽然物理内存可能是4GB,但际上由于系统的一些限制,可能只能识别到3G、3.2G或者3.5G不等。\[1\]这与人品无关,而是由于系统的限制导致的。 #### 引用[.reference_title] - *1* [为什么说32位操作系统的寻址空间是4G](https://blog.csdn.net/weixin_34185512/article/details/85428373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[计算机组成原理]-32/64位、寻址能力](https://blog.csdn.net/XJYSober/article/details/118050235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [为什么一个32位的系统,最大寻址空间,即最大承载内存空间为4G?](https://blog.csdn.net/songyuchaoshi/article/details/109020729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值