intel x86 cpu系列的寻址方式

来源:互联网 发布:星际战甲索玛p数据 编辑:程序博客网 时间:2024/06/11 13:37

    当说一个cpu是 16位 或32位时, 指的是中央处理器中的 算术逻辑运算单元(ALU)的宽度。 系统总线中的 数据总线通常与ALU有相同的宽度(有例外)。地址总线宽度最好与


数据总线宽度一致,但不现实。对8086的16位cpu,采用1M字节的内存地址空间,地址总线的宽度就是20位。这就产生一个问题:ALU是16位,也就是说可以直接加以运算的指


针的长度是16位的。那么如何实现20位的地址的运算呢? Intel采用分段的方法。(在汇编指令中,操作数为地址时 如果寻址为1M, 则应为20位的地址,分段以后, 地址仍为16


位,但通过运算得到20位的地址)。这样实现了从16位内部地址到20位实际地址的转换或“映射”。8086cpu中设置了四个段寄存器:CS,DS,SS,ES。段寄存器中的内容对应


于20位地址总线中的高16位, 所以在相加时实际上是拿内部地址中的高12位与段寄存器中的16位相加,而内部地址中的第四位保留不变。8086寻址方式缺少对内存空间的保护,


称为实地址模式,可以任意操作内存。


        80286开始实现 “保护模式”,但是只能从实地址模式转入保护模式,却不能从保护模式转回实地址模式。 


       80386开始,成为32cpu,pentium,pentium 2基本属于同种体系结构,统称为i386结构或i386cpu。386是32位,如果数据总线与地址总线宽度一致, 可以寻址到4G。如

果新设计cpu,其结构应该是很简洁的。但为了保持兼容性,又要支持保护模式。386选择在段寄存器基础上构筑保护模式的构思。保留四个段寄存器,增添2个段寄存器

FS,GS。为了实现保护模式,光用段寄存器确定一个基地址还是不够的,至少还得需要一个地址段的长度,且还需要一些其他信息,如访问权限之类的。所以这里需要的是一

个数据结构,而并非单纯的基地址。Intel设计的基本思路是:在保护模式下改变段寄存器的功能,使其从一个单纯的基地址(变相的基地址)变成指向这样一个数据结构的指

针。




     


原创粉丝点击