memcpy还是memmove?
十招编写更易维护的嵌入式代码

为什么地址线要20条?

风中纸页 posted @ 2008年9月09日 22:39 in 程序设计 , 4001 阅读
转贴请保留本文作者及文章地址

*缘起

在学习内存寻址的时候,大多数资料都写到:由于要满足80861M寻址空间,Intel的聪明的工程师想出了“段式”方法,来把1M空间分成64K段地址空间来管理,也就出现了所谓的段地址+段内偏移量来达到寻址的目的。这样的原因看起来很理所应当,而且的确非常漂亮。但是到了32位机器时代的来临,甚至64位的出现,这个架构始终面临着向后兼容的痛苦,要“兼容”这个段式寻址。

但我要提出的疑问是: 为什么当时会出现80861M的寻址空间呢?64K的地址空间就那么不够用么?非“逼着”大家想出来“段式”这么一个“可怕的”历史结果。不知道大家对于后面引起的实模式和保护模式

在经过“谷歌”以后,找到一个可以勉强解释的理由:

原文地址:http://blog.chinaunix.net/u/21948/showart_239664.html

“但当上升到16位机后,Intel8086/8088CPU的设计由于当年IC集成技术和外封装及引脚技术的限制,不能超过40个引脚。但又感觉到8位机原来的地址寻址能力2^1664KB太少了,但直接增加到16的整数倍即令AB32位又是达不到的。故而只能把AB暂时增加4条成为20条。则 2^201MB的寻址能力已经增加了16倍。但此举却造成了AB20位和DB16位之间的矛盾,20位地址信息既无法在DB上传送,又无法在16位的CPU寄存器和内存单元中存放。于是应运而生就产生了CPU段结构的原理。”

这里有个理由看来是是合理的:40个引脚的限制。先看一下8086长什么样子吧。

找到8086datasheet,查找其引脚定义:

可以看到,AD0AD15是分时复用的16条总线。这样就造成了期望在此基础上能够尽可能大的寻址,那么其中一条可选的也是很好的选择就是采用16位段寄存器+16位段内位移实现最大的且相对简单的寻址方式。

这就解决了我心中的那个疑惑。:)

  • 无匹配
cleaning services 说:
2022年1月26日 16:31

At the same time our housekeepers don’t supply the following offerings, we can can't help but recommend one on your locally-owned business owners from this network about trusted home agencies. Visit getneighborly.com to learn more.With a track record of clean homes and happy customers, DIALAMAID is your best choice for housekeeping services designed to fit your budget and schedule. We work closely with homeowners, rental property owners, and vacation homeowners to build a custom cleaning plan that fits their unique cleaning needs..


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter