16位寄存器,20位地址总线,64kb一段的内存 这个关系没搞清呢,求高手指点

ghlhy0505 2011-08-15 10:16:03
寄存器16位,地址线20位,所以要用两个16位寄存器来存贮地址,一个段基址,一个偏移量,

偏移量16bit 2^16=64kb

在实际寻址中这个是怎么运作的呢?请高手指点一下啊····多谢
...全文
978 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsykile 2013-02-04
  • 打赏
  • 举报
回复
楼上 CPU怎么知道现在他所处的是哪一个段,因为CPU在最新的的时候一会跑到那个段一会又跑到另一个段,那他是怎么识别自己处在哪个段的啊?
wyfwx 2011-08-16
  • 打赏
  • 举报
回复
段基址+偏移量 = 物理地址(20bit)
段可以有多个,每个含有16位的偏移量
至善者善之敌 2011-08-16
  • 打赏
  • 举报
回复
帮顶吧,找本微机原理来看看
ghlhy0505 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 gykgod 的回复:]
一位可以表示两个信息 0 ,1

16位可以表示 2的16次方个信息

2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K


LZ 您说是不是啊~
[/Quote]

亲,您的解答我好喜欢的捏

那这个64kb不是内存的最小单位吧? 内存的最小单位是不是跟机器的位数有关系啊?

数值的关系我是明白,可是我想不出他这个实际是怎么工作的呢?通过这种寻址方式得出一个20位地址,
根据这个地址定位到内存的一个区域,然后每次读回cpu的数据是内存最小单位的倍数吧?这个64kb只是在计算地址时分的一个段,地址得出之后就没他什么事儿了吧?哎呦···
gykgod 2011-08-16
  • 打赏
  • 举报
回复
一位可以表示两个信息 0 ,1

16位可以表示 2的16次方个信息

2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K


LZ 您说是不是啊~
ghlhy0505 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gykgod 的回复:]
物理地址=段地址*16+偏移地址

就是一个寄存器里的左移4位 加上 另一个寄存器里的偏移地址

20根地址线,表示 0x00000 - 0xffffff这个范围的地址

而寄存器16位 您想想还有4位怎么办? 刚好错开(左移4位) 相加 组成20位

附:
段地址:8086CPU将1MB的存储器空间分成许多逻辑段,每个段最大限制为64KB, 段地址就是逻辑段在主存中的起始位置。……
[/Quote]

我主要就是没理解偏移地址那块,为什么限定64kb一段,就正好可以用16位的偏移地址呢?16位和64kb是怎样的一个对应关系呢?
ghlhy0505 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hiroyukki 的回复:]
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了
[/Quote]

那汇编语言里面还是要用到这种寻址方式的吧?
gykgod 2011-08-15
  • 打赏
  • 举报
回复
物理地址=段地址*16+偏移地址

就是一个寄存器里的左移4位 加上 另一个寄存器里的偏移地址

20根地址线,表示 0x00000 - 0xffffff这个范围的地址

而寄存器16位 您想想还有4位怎么办? 刚好错开(左移4位) 相加 组成20位

附:
段地址:8086CPU将1MB的存储器空间分成许多逻辑段,每个段最大限制为64KB, 段地址就是逻辑段在主存中的起始位置。为了能用16位寄存器表示段地址,8086规定段地址必须是模16地址,即为xxxx0H形式,省略低4位0,段地址就可以用16位数据表示,它通常被保存在16位的段 寄存器中。

偏移地址:存单元距离段起始位置的偏移量简称偏移地址,由于限定每段 不超过64KB,所以偏移地址也可以用16位数据表示。

物理地 址:在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址,把段地址左移4位再加上偏移地址就形成物理地址。


伺候舒服为止~
贪食蛇男 2011-08-15
  • 打赏
  • 举报
回复
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了
skyworth98 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luciferisnotsatan 的回复:]
引用 1 楼 jackyjkchen 的回复:

8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……

++
[/Quote]
++
luciferisnotsatan 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]

8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……
[/Quote]
++
jackyjkchen 2011-08-15
  • 打赏
  • 举报
回复
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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