汇编语言的段地址与偏移地址的一点小心得:8086CPU是为了方便存储段地址才规定其一定是10H的倍数的

如下言论及解析:

具有16位CPU的微机内部有20根地址总线,编码区间为00000H~0FFFFFH,可直接访问1MB(2e20)的内存空间。

16位微机把内存空间划分成若干个逻辑段,每个逻辑段要求如下:

  1. 逻辑段的起始地址(段地址)必须是16(10H)的倍数,即最低四位二进制数字全部为零,也就是最低一位十六进制数字为零,如:123CH, 43AFH.(有很多书上将五位地址去除结尾零以外的部分称作段地址。我认为,将其称为五位更好理解,并且也有书上是这么讲的,无碍)。
  2. 逻辑段的最大容量为64KB,由16位的指针寄存器决定。即2e16 = 64KB。

解析:

  1. 为了用两个四位(十六进制,以下不再赘述)寄存器来存储(表示)一个五位的内存地址,计算机将段地址的末尾位规定为0。即使得段地址为10H的倍数。这样,则只需要存储前四位于寄存器中,使用时再通过地址加法器并与相应的偏移地址计算得到实际的物理地址。
  2. 对于一个段地址,其与偏移地址配合可表示的内存空间有64KB即一个段地址可以表示的最大容量。
  3. 鉴于段地址只能是10H的倍数,对于两个相邻的段地址,偏移地址都为0000H时,其两者在内存空间上相差10H,而一个段地址配合偏移地址所能表示的空间有64KB之大,即10000H个存储单元,所以两个段地址与偏移地址(各自的)配合后所能够表示的内存单元很有可能重叠!所以,同一个物理地址可以有多个逻辑地址,且多个逻辑地址的段地址都不相同。
  4. 对于16位微机,有20根地址总线,所访问的1MB内存中,最多可分成64KB个段即10000H((0FFFFFH+1)/10H),且这些段相互重叠;至少则可分成16个互不重叠的段(2e10/2e16)

为什么要乘以10H,总结一下就是题目那句话:8086 CPU为了可以用两个四位寄存器存储一个五位内存地址,方便存储段地址,才设定其为10H的倍数。

四位寄存器:16位(binary)长度寄存器

五位内存地址:20(binary)位长度内存地址

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值