所谓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 寄存器模型