一、 ALU
ALU(arithemetic and logic unit),书面意思是:算术与逻辑部件,运算器,算术与逻辑单元,通俗来讲:CPU处理的数据位数。从4位、8位、16位、32位,处理能力越来越强。
发问:16位计算能力如何处理20位的地址呢?
二、 CS:IP
CS:IP 是一组寄存器,用于告知 CPU 当前将要读取的汇编指令的地址,其中 CS 为代码段寄存器,而IP为指令指针寄存器。
CS(code segment)代码段寄存器;IP(instruction pointer)指令指针(简单理解就是偏移量);
mov ax, 1234H
mov bx, ax
AH、AL、BH、BL都是8位的(分别用于计算和寻址)寄存器。
AH与AL合成AX(accumulator):累加寄存器;BH和BL合成BX(base):基址寄存器;
很明显,10000H:0000H 指向的是mov ax, 1234H 的首地址,如果轮到 CPU 要执行这条汇编指令的话,需要获取 10000H:0000H, 然后根据首地址讲汇编指令对应的机器码从内存中读入到 CPU的指令寄存器中。CS存放10000H,IP存放0000H。从图1 中我们还可以看到,3个字节用来描述这条汇编指令。CS为10000H,IP为0003H时,则可以知道CPU已经将3个字节的机器码读入到指令寄存器中去了。
三、 演变
3.1 实地址模式
先回答第1节提出的问题:16位计算能力如何处理20位的地址呢?
是这样处理的:每个段的起始地址必须为16的倍数,特点:二进制低4位全部为0。DS(data segment)作为段基址。IP(instruction pointer)偏移地址(偏移量、逻辑地址)。如图3 所示:显而易见,段大小最小是16B。IP寄存器加满的话,占有2^16 Byte=64KB。每个段的大小∈[16, 64K]。
寻址手段:物理地址=基地址<<4 + IP
20位地址所能支持的空间为1MB(2^20B)。由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址,最大寻址空间1MB,最大分段64KB。
3.2 保护模式
全局描述符表GDT(Global Descriptor Table)只有一张(一个处理器对应一张GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里。
通过GDTR找到GDT,通过选择子中的索引字段取出段描述符。
正如图5 组图所告知我们的:如图5-4,选择子字段为index,table indicator(GDT或LDT),requested privilege level(0级(特权级)到3级(用户级))。索引一共是13位,故而有2^13中变化。系统默认占用了12个,用户能使用的剩下2^13-12=8180个。