You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MBR实模式下10KB内存分配原理及地址定位技术问询

MBR预启动环境中缓冲区分配解析

关于“10KB分配”的误解

代码里seg000:7C1D sub word ptr ds:413h, 10h中的10h是十六进制数值,对应十进制的16,所以这行代码实际是从BIOS维护的可用内存总量中减去16KB,而非你理解的10KB——你应该是把十六进制的10h误认成了十进制的10。

第2、3行代码的作用

这两行用来计算新分配缓冲区的段地址:

  • seg000:7C22 mov ax, ds:413h:将减去16KB后的可用内存KB数加载到AX寄存器
  • seg000:7C25 shl ax, 6:把AX的值左移6位,等价于乘以64。实模式下,段地址左移4位(乘以16)对应物理地址的高16位;1KB等于1024字节,1024/16=64,因此可用内存的KB数乘以64,就能得到可用内存起始位置的段地址——而这个地址正是刚分配的16KB缓冲区的起始段地址(可用内存被减去16KB后,原可用内存的起始点就变成了新缓冲区的起始点)。

缓冲区的实模式地址

缓冲区的段地址被存入buffer_segm变量中,实模式下该缓冲区的起始地址为buffer_segm:0000(偏移地址用0,因为段地址已经指向缓冲区的起始位置)。对应的物理地址可通过公式计算:buffer_segm << 4 + 0,也就是(原可用内存KB数 - 16) * 1024字节,正好是16KB缓冲区的起始物理地址。

内容的提问来源于stack exchange,提问作者Nerios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:00:11