您的位置:首页 > 其它

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

2014-10-31 22:50 399 查看
如下言论与解析:

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

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

1>逻辑段的起始地址(段地址)必须是16(10H)的倍数,即最低四位二进制数字全部为零,也就是最低一位十六进制数字为零,如:123CH, 43AFH.(有很多书上将武五位地址除去零以外的部分称作段地址,我认为,将其称为五位更好理解,并且也有书上是这么讲的,无碍)。

2>逻辑段的最大容量为64KB,由16位的指针寄存器决定。即2e16 = 64KB。

解析:1>为了用两个四位(十六进制,以下不再赘述)寄存器来存储(表示)一个五位的内存地址,计算机将段地址的末尾位规定为0,即,使得短地址为10H的倍数,这样,则秩序存储前四位于寄存器中,使用时再通过地址加法器并与相应的偏移地址计算得到实际的物理地址。

3>对于一个段地址,其与偏移地址配合可表示的内存空间有64KB即一个段地址可以表示的最大容量。

4>鉴于段地址只能是10H的倍数,对于两个相邻的段地址,偏移地址都为0000H时,其两者在内存空间上相差10H,而一个段地址配合偏移地址所能表示的空间有64KB之大,即10000H个存储单元,所以两个段地址与偏移地址(各自的)配合后所能够表示的内存单元很有可能重叠!所以,同一个物理地址可以有多个逻辑地址,且多个逻辑地址的段地址都不相同。

5>对于16位微机,有20根地址总线,所访问的1MB内存中,最多可分成64KB个段即10000H((0FFFFFH+1)/10H),且这些段相互重叠;至少则可分成16个互不重叠的段(2e10/2e16)

可能有很多跟我一样的菜鸟有这样的问题,给出一个段地址和一个偏移地址可以计算出实际的物理地址,但是就是想不清楚

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

定其为10H的倍数的,我的问题……够菜吧?!哈哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: