偏移量16bit 2^16=64kb
在实际寻址中这个是怎么运作的呢?请高手指点一下啊····多谢
12 个解决方案
#1
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……
#2
++
#3
++
#4
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移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位再加上偏移地址就形成物理地址。
伺候舒服为止~
就是一个寄存器里的左移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
那汇编语言里面还是要用到这种寻址方式的吧?
#7
我主要就是没理解偏移地址那块,为什么限定64kb一段,就正好可以用16位的偏移地址呢?16位和64kb是怎样的一个对应关系呢?
#8
一位可以表示两个信息 0 ,1
16位可以表示 2的16次方个信息
2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K
LZ 您说是不是啊~
16位可以表示 2的16次方个信息
2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K
LZ 您说是不是啊~
#9
亲,您的解答我好喜欢的捏
那这个64kb不是内存的最小单位吧? 内存的最小单位是不是跟机器的位数有关系啊?
数值的关系我是明白,可是我想不出他这个实际是怎么工作的呢?通过这种寻址方式得出一个20位地址,
根据这个地址定位到内存的一个区域,然后每次读回cpu的数据是内存最小单位的倍数吧?这个64kb只是在计算地址时分的一个段,地址得出之后就没他什么事儿了吧?哎呦···
#10
帮顶吧,找本微机原理来看看
#11
段基址+偏移量 = 物理地址(20bit)
段可以有多个,每个含有16位的偏移量
段可以有多个,每个含有16位的偏移量
#12
楼上 CPU怎么知道现在他所处的是哪一个段,因为CPU在最新的的时候一会跑到那个段一会又跑到另一个段,那他是怎么识别自己处在哪个段的啊?
#1
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……
#2
++
#3
++
#4
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移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位再加上偏移地址就形成物理地址。
伺候舒服为止~
就是一个寄存器里的左移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
那汇编语言里面还是要用到这种寻址方式的吧?
#7
我主要就是没理解偏移地址那块,为什么限定64kb一段,就正好可以用16位的偏移地址呢?16位和64kb是怎样的一个对应关系呢?
#8
一位可以表示两个信息 0 ,1
16位可以表示 2的16次方个信息
2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K
LZ 您说是不是啊~
16位可以表示 2的16次方个信息
2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K
LZ 您说是不是啊~
#9
亲,您的解答我好喜欢的捏
那这个64kb不是内存的最小单位吧? 内存的最小单位是不是跟机器的位数有关系啊?
数值的关系我是明白,可是我想不出他这个实际是怎么工作的呢?通过这种寻址方式得出一个20位地址,
根据这个地址定位到内存的一个区域,然后每次读回cpu的数据是内存最小单位的倍数吧?这个64kb只是在计算地址时分的一个段,地址得出之后就没他什么事儿了吧?哎呦···
#10
帮顶吧,找本微机原理来看看
#11
段基址+偏移量 = 物理地址(20bit)
段可以有多个,每个含有16位的偏移量
段可以有多个,每个含有16位的偏移量
#12
楼上 CPU怎么知道现在他所处的是哪一个段,因为CPU在最新的的时候一会跑到那个段一会又跑到另一个段,那他是怎么识别自己处在哪个段的啊?