数据,通用寄存器,段寄存器

我们经常会有拿一个地址找房间的经验吧,比如说302,那么,我们知道这房间在三楼,是从东边算过来的第二间,
这个地址其实就是两个地址组成 :3楼,2号房。
注意到没,每个地址是一位数,但是通过大家熟知的规律合成了一个三位数的地址。
把这个例子带到这个问题中,你可以这样理解,段地址相当于楼层地址,偏移地址相当于房间号,最后合成的就是物理地址。
8086的地址线20根,数据线16根,
物理地址的位数取决于8086地址线的数量,
16位的数据线决定了8086的寄存器只能有16位,这样一来不管是段寄存器还是通用寄存器都是16位的。
所以,段地址和偏移量也都是16位了。
当要合成20位的物理地址时,先把段地址左移4位(就是*16的原因),变成20位的,

然后再加16位的偏移地址,得到最后的20位物理地址。

比如一个地址是00100H(一个16位表示4个2进制位,5个就是20位)

再说下,一个16进制左移1位就是2进制左移4位(代数自己试)

你可以表示成(用16位表示),0010:0000(0010*16+0000=00100)

 0000:0100(0000*16+0100=00100),结果是不唯一 



物理地址就是数据在内存中实际存放的位置.因为8086或8088有20条地址线,寻址能力有2的20次方,1MBit.

而8086或8088内部寄存器是是16位的,无法用一个位完全表示出来.

所以采用段首地址+偏移量两个寄存器来表示的方式,俗称PC或CS:IP来表示一个实际的物理地址,这就是所谓的虚拟地址.

例如段首地址为0000H,而偏移量的范围就在0000H-FFFFH之间,

就表示00000H-0FFFFH的实际内存单元.就是说一个段的大小在64Kb.

猜你喜欢

转载自zhangpuego.iteye.com/blog/1255208