阅读更多
微处理器中的位数就是其一次所能处理的二进制数的位数。
寄存器中的位数、数据总线的位数是与处理器的位数一致的,它们一般来说是相等的,这是为什么呢?因为一般处理器中的算术逻辑单元(Arithmetic and Logic Unit)ALU是通过总线与寄存器相连的,微处理器中的位就决定了总线和寄存器的位数,所以可以从寄存器、数据总线的位数来看这个处理器的位数。
这里之所以不是控制总线和地址总线,是由于地址总线的位数可以和处理器的位数不同,地址总线的位数决定了处理器的寻址空间,比方说地址总线是16位的,那么处理器的寻址空间就是2^16=64kb,比方说8051单片机,它的地址总线就是16位的,而它却是8位机,因为它一次只能处理8位的数据,并且其寄存器是8位的,数据总线也是8位的。
地址总线是由段地址和偏移量组成的。8086的地址线20根,数据线16根。物理地址的位数取决于8086地址线的数量,16位的数据线决定了8086的寄存器只能有16位,这样一来不管是段寄存器还是通用寄存器都是16位的。所以,段地址和偏移量也都是16位了。当要合成20位的物理地址时,先把段地址左移4位(相当于是这个数乘以16),然后再加16位的偏移地址,得到最后的20位物理地址。
比如段地址是0000 0000 0000 0001
偏移量是0001 0001 0001 0001
那么先把段地址左移四位,即得到0000 0000 0000 0001 0000
把这个20位数加上(加法运算,并不是接在后面)偏移量,就得到20位的物理地址:
0000 0001 0001 0010 0001
物理地址就是数据在内存中实际存放的位置.因为8086或8088有20条地址线,寻址能力有2的20次方,1MBit.
上面说的这种采用段首地址+偏移量两个寄存器来表示的方式,俗称PC或CS:IP,这样来表示一个实际的物理地址,这就是所谓的虚拟地址。
例如段首地址为0000H,而偏移量的范围就在0000H-FFFFH之间,
就表示00000H-0FFFFH的实际内存单元.一个段的大小为64Kb.
另外,操作系统的位数与处理器位数相一致。因为编写汇编语言的时候,要与处理器位数相一致。
因此总结一下:
处理器位数=数据总线位数=寄存器位数=段地址位数(即段寄存器位数)=偏移量位数(即通用寄存器位数)=操作系统位数
以上都不等于地址总线位数。