地址_前世今生

一、 ALU

ALU(arithemetic and logic unit),书面意思是:算术与逻辑部件,运算器,算术与逻辑单元,通俗来讲:CPU处理的数据位数。从4位、8位、16位、32位,处理能力越来越强。

图1 ALU宽度、地址总线根数的演变

发问: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):基址寄存器;

图2 CPU最终读取的是机器码

很明显,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位的地址呢?

图3 段基址

是这样处理的:每个段的起始地址必须为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 保护模式

图4 四者之间的关系

全局描述符表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个。

图5-1 描述符表
图5-2 段描述符
图5-3 GDTR
图5-4 选择子(实模式下的段寄存器)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值