2017年12月14日daily

所谓16位,主要指CPU当中的运算部件可以支持16位数据的运算。

因为运算当中所需要的数据一般会放在通用寄存器中,所以通用寄存器和运算单元的位宽是相同的。而运算单元产生的数据又经常会用作访问存储器的地址。

所以cpu访问存储器地址的宽度,也常常和运算单元的位宽相同。

运算单元宽度 == 寄存器宽度 == 地址总线宽度  for convenience。


16----------32--------------64

所谓16位,主要指CPU当中的运算部件可以支持16位数据的运算。

因为运算当中所需要的数据一般会放在通用寄存器中,所以通用寄存器和运算单元的位宽是相同的。而运算单元产生的数据又经常会用作访问存储器的地址。

所以cpu访问存储器地址的宽度,也常常和运算单元的位宽相同。

运算单元宽度 == 寄存器宽度 == 地址总线宽度  理论上。

那么对于8086来说,IP(Instruction Pointer )指令指针寄存器充当的就是PC(Program Counter)寄存器的角色。

IP地址的寻址能力是2^16 个八位即 Byte 字节 64KB

但其地址总线宽度为20 寻址能力为1MB

解决方案  :段寄存器 Segment Register

代码段寄存器 CS

eg 从1M内存中取出指令:先在段寄存器中保存地址的一部分,另一部分根据程序本身产生。

由于8086的寄存器最大为16位,因此地址在寄存器中按16位大小存放,由段地址和偏移地址联合表示的地址类型叫逻辑地址,例如2000H:1000H,这里的2000H表示段的起始地址,即段地址,而1000H则表示偏移地址,表示逻辑地址时总是书写成段地址:偏移地址。

物理地址即是真实存在的唯一地址,是指的内存中各个单元的单元号,

由8086有20条地址线,因此可寻址2的20次方,按2进制位表示规则,即有20位,这个就是物理地址。物理地址因为超过了寄存器大小(16位)因此无法直接存放,需要合成,

公式为物理地址=段地址×10H+偏移地址,公式中的数据可从逻辑地址获得。

H 表示该数是十六进制,B 表示二进制;O 表示八进制。

逻辑地址是16位的,因此范围是2的16次方,即64K。

物理地址是20位的,因此范围是2的20次方,即1M。

数据段寄存器 DS

附加段寄存器 ES

堆栈段寄存器 SS

80386

IA-32 寄存器模型

你可能感兴趣的:(2017年12月14日daily)