1. Intel X86 cpu-8086和8088(16位处理器)
CPU算术逻辑单元ALU宽度为16位(一次能处理16位的数据)。数据总线宽度——16位(一次能传输16位的数据)。地址总线宽度——20位(用20位表示一个地址,一共能表示220个地址,即能直接寻址/确定内存地址的大小为1M)。
问题:16位CPU一次处理的内存指针长度为16位,但地址是20位的,怎么能用16位的数据表示20位才能表示的内存地址?
解决:在CPU内设置四个‘段寄存器’‘:CS、DS、SS和ES,分别指向内存中的’执行指令‘、’数据‘、’堆栈‘、其他。段寄存器16位。用访问内存指令中的16位’内部地址‘ + 16位段寄存器,表示20位的实际地址。
段寄存器16位对应20位实际地址中的高16位,在寻址前,指令中16位内部地址高12位与段寄存器中的16位地址相加,得到20位地址中的高16位;16位内部地址中剩下的低4位保持不变,和前面得到的高16位,一起拼成20位。
段寄存器16位确定一个内存段(64K)的起始地址,内部地址中低4位相当于是段内的偏移量。
2. 80386CPU(实地址 + 保护模式)/(段式内存管理)
ALU和数据总线是32位的。地址总线宽度32位。
虽然32位直接寻址很方便,但之前的CPU不是32位的,Interl的