寄存器
包含在处理器内部的内存储单元,称为寄存器。
1、 优点:处理器可以通过寄存器来访问数据,从而可以不用通过访问内存。
2、 缺点:寄存器的数目是有限的。
IA-32系列中一般有如下寄存器:
|
寄存器 |
描述 |
|
通用 |
8个32位寄存器,用于存储正在处理的数据 |
|
段 |
6个16位寄存器,用于处理内存访问 |
|
指令指针 |
1个32位寄存器,指向要执行的下一条指令 |
|
浮点 |
8个80位寄存器,用于浮点计算 |
|
控制 |
5个32位寄存器,用于控制处理器操作模式 |
|
调试 |
8个32位寄存器,用于在调试处理时的信息 |
|
标志 |
1个32位寄存器,确定操作状态 |
通用寄存器
8个32位寄存器分别有以下用途
|
寄存器 |
描述 |
|
EAX |
主要用于操作数据及结果的累加器 |
|
EBX |
指向数据内存段中的数据的指针 |
|
ECX |
字符串和循环操作的计数器 |
|
EDX |
I/O指针 |
|
EDI |
字符串操作目的地指针(destination) |
|
ESI |
字符串操作源指针(Source) |
|
ESP |
栈顶指针 |
|
EBP |
栈底指针 |
段寄存器
6个16位段寄存器描述如下:
|
寄存器 |
描述 |
|
CS |
代码段 |
|
DS |
数据段 |
|
SS |
堆栈段 |
|
ES |
附加段指针 |
|
FS |
附加段指针 |
|
GS |
附加段指针 |
1、 寻址有三种:平坦内存模式,实地址模式,分段寻址模式。这三种的主要区别如下表:
|
寻址 |
描述 |
|
平坦内存模式 |
直接访问内存,段寄存器什么的,不用 |
|
实地址模式 |
16位寄存器,16位的段寄存器,要访问20位的内存。只好把段寄存器左移4位再加上偏移值。 |
|
分段 |
把内存分成好几个段,每个段的信息放在固定的某个数组中。而段寄存器值只是这个数组的一个索引。 |
关于这一点,书上并没有讲得很清楚。我还以为实地址与平坦模式是一样的。实际上不一样。
2、 DS,ES,FS,GS都是用于数据段寻址,这样就可以使用4个独立的数据段。从而程序可以隔离数据元素,让其有不同的属性。比如C语言里面的变量与常量。
控制寄存器
5个32位控制器描述如下:
|
寄存器 |
描述 |
|
CR0 |
控制操作模式,处理器状态 |
|
CR1 |
当前不用 |
|
CR2 |
内存页面错误信息 |
|
CR3 |
内存页面目录信息 |
|
CR4 |
支持处理器的特性和说明处理器的特性能力 |
1、 不能直接访问控制寄存器的值。需要通过通用寄存器来查询或更改其值。
标志寄存器
标志寄存器分为三种:
1、 状态标志
2、 控制标志
3、 系统标志
状态标志
|
标志 |
位 |
作用 |
|
CF |
0 |
进位标志 |
|
PF |
2 |
奇偶标志 |
|
AF |
4 |
辅助进位标志 |
|
ZF |
6 |
零标志 |
|
SF |
7 |
符号标志 |
|
OF |
11 |
溢出标志 |
1、 无符号操作数最高位发生进位或借位,CF置1,表明溢出
2、 PF为1表示偶数
3、 AF是只是进位或借位则置1
4、 SF是结果最高位,表示结果为正或负
5、 OF,当符号数运算正值过大,或负值过小,置1
控制标志
就一个DF,DF=1表示递减方式处理内存字符串。DF=0表示按递增方式处理字符串
系统标志
|
标志 |
位 |
说明 |
|
TF |
8 |
陷阱标志, 设置为1时启用单步模式, 在单步模式下处理器每次只执行一条命令。 |
|
IF |
9 |
中断使能标志, 控制处理器如响应从外部源接收到的信号。 |
|
IOPL |
12,13 |
IO特权级别标志, 表明当前正在运行任务的IO特权级别, 它定义IO地址空间的特权访问级别, 该值必须小于或者等于访问I/O地址空间的级别; 否则任何访问IO空间的请求都会被拒绝! |
|
NT |
14 |
嵌套任务标志控制当前运行的任务是否连接到前一个任务, 它用于连接被中断和被调用的任务。 |
|
RF |
16 |
恢复标志用于控制在调试模式中如何响应异常。 |
|
VM |
17 |
虚拟8086模式, 表明处理器在虚拟8086模式中而不是保护模式或者实模式。 |
|
AC |
18 |
对准检查标志, 用于启用内存引用的对准检查 |
|
VIF |
19 |
虚拟中断标志, 当处理器在虚拟模式中操作时, 该标志起IF标志的作用。 |
|
VIP |
20 |
虚拟中断挂起标志, 在虚拟模式操作时用于表示一个中断正在被挂起。 |
|
ID |
21 |
表示CPU是否支持cpuid指令, 如果处理器能够设置或者清零这个标志, 表示处理器支持该指令。 |

上面图片中PF应该是奇偶位
1138

被折叠的 条评论
为什么被折叠?



