关于80x86段式内存管理问题

秋水无痕2017 2018-06-20 10:42:54
参考书本《汇编语言 第二版 王爽著》 P24
原文:"段地址 x 16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;"

假设一个段地址为FFFFH,求其寻址范围?
在Debug中可以对FFFF:0000 ~ FFFF:FFFF其中的任意地址进行读写操作;

而如果使用 段地址 x 16 + 偏移地址 = 物理地址的寻址范围如下:
FFFFH x 16 + 0000H = FFFF0H
FFFFH x 16 + FFFFH = 10FFEFH 得到了一个24位的物理地址,显然是不对的。

所以我的理解是有误的,但是书这段看了几遍,实在是想不出错在哪里,如果是段地址必然是16的倍数这样还说的通,但【段地址x16】必然是16的倍数这个简直就跟没说一样,等于一个数乘以16以后必然可以整除16。实在没有理解什么意思。
...全文
115 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
right...
秋水无痕2017 2018-06-21
  • 打赏
  • 举报
回复
大概明白了 。说白了就是Windows XP中运行的Debug其实并不是真正的8086,它运行的平台如果是286或以上的话是可以寻址超过2^20的限制的。是这个意思吧 ?
  • 打赏
  • 举报
回复
这取决于CPU的寻址方式,如果286+开A20的话,从FFFF段就可以寻址1MB以上64K-16字节的地址部分,DOS中称之为HMA,如果关闭A20,超过1MB的地址会回绕到0000段。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧