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

时间:2022-03-28 11:34:25
寄存器16位,地址线20位,所以要用两个16位寄存器来存贮地址,一个段基址,一个偏移量,

偏移量16bit   2^16=64kb  

在实际寻址中这个是怎么运作的呢?请高手指点一下啊····多谢

12 个解决方案

#1


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

#2


引用 1 楼 jackyjkchen 的回复:
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……

++

#3


引用 2 楼 luciferisnotsatan 的回复:
引用 1 楼 jackyjkchen 的回复:

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

++

++

#4


段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了

#5


物理地址=段地址*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位再加上偏移地址就形成物理地址。


伺候舒服为止~

#6


引用 4 楼 hiroyukki 的回复:
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了


那汇编语言里面还是要用到这种寻址方式的吧?

#7


引用 5 楼 gykgod 的回复:
物理地址=段地址*16+偏移地址

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

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

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

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


我主要就是没理解偏移地址那块,为什么限定64kb一段,就正好可以用16位的偏移地址呢?16位和64kb是怎样的一个对应关系呢?

#8


一位可以表示两个信息 0 ,1 

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

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


LZ 您说是不是啊~

#9


引用 8 楼 gykgod 的回复:
一位可以表示两个信息 0 ,1 

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

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


LZ 您说是不是啊~


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

    那这个64kb不是内存的最小单位吧?  内存的最小单位是不是跟机器的位数有关系啊?
    
    数值的关系我是明白,可是我想不出他这个实际是怎么工作的呢?通过这种寻址方式得出一个20位地址,
    根据这个地址定位到内存的一个区域,然后每次读回cpu的数据是内存最小单位的倍数吧?这个64kb只是在计算地址时分的一个段,地址得出之后就没他什么事儿了吧?哎呦···

#10


帮顶吧,找本微机原理来看看

#11


段基址+偏移量 = 物理地址(20bit)
段可以有多个,每个含有16位的偏移量

#12


楼上 CPU怎么知道现在他所处的是哪一个段,因为CPU在最新的的时候一会跑到那个段一会又跑到另一个段,那他是怎么识别自己处在哪个段的啊?

#1


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

#2


引用 1 楼 jackyjkchen 的回复:
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……

++

#3


引用 2 楼 luciferisnotsatan 的回复:
引用 1 楼 jackyjkchen 的回复:

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

++

++

#4


段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了

#5


物理地址=段地址*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位再加上偏移地址就形成物理地址。


伺候舒服为止~

#6


引用 4 楼 hiroyukki 的回复:
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了


那汇编语言里面还是要用到这种寻址方式的吧?

#7


引用 5 楼 gykgod 的回复:
物理地址=段地址*16+偏移地址

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

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

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

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


我主要就是没理解偏移地址那块,为什么限定64kb一段,就正好可以用16位的偏移地址呢?16位和64kb是怎样的一个对应关系呢?

#8


一位可以表示两个信息 0 ,1 

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

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


LZ 您说是不是啊~

#9


引用 8 楼 gykgod 的回复:
一位可以表示两个信息 0 ,1 

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

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


LZ 您说是不是啊~


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

    那这个64kb不是内存的最小单位吧?  内存的最小单位是不是跟机器的位数有关系啊?
    
    数值的关系我是明白,可是我想不出他这个实际是怎么工作的呢?通过这种寻址方式得出一个20位地址,
    根据这个地址定位到内存的一个区域,然后每次读回cpu的数据是内存最小单位的倍数吧?这个64kb只是在计算地址时分的一个段,地址得出之后就没他什么事儿了吧?哎呦···

#10


帮顶吧,找本微机原理来看看

#11


段基址+偏移量 = 物理地址(20bit)
段可以有多个,每个含有16位的偏移量

#12


楼上 CPU怎么知道现在他所处的是哪一个段,因为CPU在最新的的时候一会跑到那个段一会又跑到另一个段,那他是怎么识别自己处在哪个段的啊?