打印

关于寻址范围的小问题

[复制链接]
2554|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhw888666|  楼主 | 2011-3-5 14:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
qhw888666|  楼主 | 2011-3-5 14:36 | 只看该作者
我觉得1048576B  应该是1048576个位吧,65536是2的16方,1048576是2的20方

使用特权

评论回复
板凳
batsong| | 2011-3-5 14:53 | 只看该作者
记得x86比较特殊,intel为了向前兼容,搞了个什么基址加偏移的寻址方式

使用特权

评论回复
地板
53789| | 2011-3-5 18:09 | 只看该作者
一个16位的段寄存器可以表示65536个不同的段。

楼主的书上有没有说一个“段”是多少Byte呢?

使用特权

评论回复
5
qhw888666|  楼主 | 2011-3-5 21:59 | 只看该作者
早期的8086系列处理器 都是16位的,80486以后都是32位的了

使用特权

评论回复
6
highgear| | 2011-3-5 22:51 | 只看该作者
8086 是 16bit data bus, 20bit address bus. 只能用 32bit or 16bit 表示地址。8086 用 32bit 显然太浪费, 所以弄出了一个 段寄存器, 这样可以用 16bit 来寻址整个 1M 空间。一个段 64K,
段内 16bit寻址.
20bit 寻址为: seg:offset = (seg << 4) + offset

使用特权

评论回复
7
cai82119| | 2011-3-6 14:14 | 只看该作者
我觉得可以这样理解:16位段寄存器可表示的数为0--1111 1111 1111 1111b,十进制即为0至65535,一共是65536个数,所寻址到的是一个16位的数据,所以65536x16b=1048576b.

使用特权

评论回复
8
ayb_ice| | 2011-3-7 08:33 | 只看该作者
65536*16=1048576

使用特权

评论回复
9
刘前辈| | 2011-3-7 12:32 | 只看该作者
本帖最后由 刘前辈 于 2011-3-7 12:40 编辑

还是6楼所长说的靠谱:

8086是16位处理器,而8086CPU外部地址总线却可以有20位!这个20位物理地址实际上是:
16位段地址和16位偏移地址的合成。怎么合成的?这个合成器在CPU内部,很简单,把16位段地址左移4位,加上16位偏移地址就行了。举例:
一个20位物理地址0x12345=(段地址<<4) + 偏移地址;
有多种合成方法:
如果:    段地址=1000H   则 偏移地址=2345H
                             1200H                            0345H
                             1230H                             0045H
                              ……                              ……
显然,一个段的最大长度是16位偏移地址所寻址=64K。

         8051CPU一个段只有256字节?

使用特权

评论回复
10
gangei| | 2011-3-7 21:27 | 只看该作者
65536*16=1048576

使用特权

评论回复
11
highgear| | 2011-3-7 23:44 | 只看该作者
寻址1048576B, 并不完全准确,实际上 80x86 的实地址模式可寻址空间为 1114096B.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

0

粉丝