为何8086中寻址范围大于内存

schlieffen 2009-04-05 11:04:06
我们知道段地址最大值是FFFFH,基础地址就是FFFF0H,偏移地址也是16位的,最大值是FFFFH,两个最大值构成的地址就是10FFEFH。然而我们知道20位的最大值是FFFFFH,前者明显大于后者。
...全文
386 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlieffen 2009-04-06
  • 打赏
  • 举报
回复
以下是我找到的一些资料:
早期的8086只有20根地址线,只能访问1M的地址空间。CPU寻址则按段+偏移的方式进行。16位段+16位偏移的可能的范围是0~0x10FFEF(即0xFFFF0+0xFFFF),即1M+65520字节的范围。由于只有20根地址线,所以在对1M~1M+65520范围进行访问时,会发生“地址回绕”的现象,就是说实际会访问到0~65520的地方。据说某个著名的/臭名昭著的软件利用了这个特点。在80286,386等CPU上,它会失败,因为这些CPU有多于20根的地址线,并不产生“地址回绕”现象。为了保持完全的兼容性,IBM决定在PC AT系统上加个逻辑,来模仿以上的回绕特征。他们的方法就是把A20和键盘控制器的一个输出进行AND,这样来控制A20的打开和关闭。一开始时A20是被屏蔽的(总为0),直到系统软件去打开它。

schlieffen 2009-04-06
  • 打赏
  • 举报
回复
你是所说的是同一地址,但不能回答我提问的,如果按你的写法,20位的地址最大为FFFFFH,也就是FFFF:000FH,而我们完全可以表示FFFF:FFFFH这样的地址,这样的话就是寻址范围大于了内存地址了。7楼说的有道理.
jxc25 2009-04-06
  • 打赏
  • 举报
回复
大于20位的有个忽略开关.
叫做a20开关
huayangcvj 2009-04-06
  • 打赏
  • 举报
回复

顶一下
rookie001 2009-04-06
  • 打赏
  • 举报
回复
ls的正解,所以楼主这样的分析是不行的。
ToBeTough 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lizi5803 的回复:]
我个人认为,FFFF:000EH与F000:FFFEH应该是内存的同一地址
[/Quote]
就是,所以同一个物理地址很多种表示方法;
BAYNPU 2009-04-06
  • 打赏
  • 举报
回复
对,是内存的同一地址
难得糊涂ha 2009-04-06
  • 打赏
  • 举报
回复
我个人认为,FFFF:000EH与F000:FFFEH应该是内存的同一地址
「已注销」 2009-04-05
  • 打赏
  • 举报
回复
8086段地址是16位,而寻址的物理地址是20位,所以需要通过寻址才能完成基础地址+偏移地址=物理地址的寻址工作。

21,500

社区成员

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

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