寄存器 | 描述 |
---|---|
通用寄存器 | 8个32位,存储正在处理的数据 |
段寄存器 | 6个16位,处理内存访问 |
指令指针寄存器 | 1个32位,指向要执行的下一条指令码 |
浮点数据寄存器 | 8个80位,浮点数据 |
控制寄存器 | 5个32位,确定处理器的操作模式 |
调试寄存器 | 8个32位,在调试处理器时包含信息 |
通用寄存器
寄存器 | 描述 |
---|---|
EAX | 用于操作数和结果数据的累加器 |
EBX | 指向数据内存段的数据的指针 |
ECX | 字符串和循环操作的计数器 |
EDX | I/O指针 |
EDI | 用于字符串操作的目标的数据指针 |
ESI | 用于字符串操作的源的数据指针 |
ESP | 堆栈指针 |
EBP | 堆栈数据指针 |
EAX,EBX,ECX,EDX可以通过16位,8位名称引用
|<------------EAX---------------->|
|1 2 3 4 5 6 7 8 |1 2 3 4 5 6 7 8 |
|----------------|-------|--------|
|. . . . . . . . |. AH . | . AL . |
|----------------|-------|--------|
. . . . . . . . .|<------AX------>|
段寄存器
IA-32允许3种访问系统内存的方法 平坦内存模式;分段内存模式;实地址模式
- 平坦内存模式:所有指令、数据、堆栈包含在相同的地址空间内,通线性地址访问每个内存位置
- 分段内存模式:划分为3个段,指令段,数据段,堆栈段;内存位置通过逻辑地址定义,包含段地址和偏移地址;处理器将逻辑地址转换为线性地址
- 实地址模式:所有段寄存器指向0线性地址,所以指令,数据,堆栈元素搜通过线性地址直接访问
段寄存器 | 描述 |
---|---|
CS | 代码段基地址;处理器根据CS值和EIP中的偏移值取指令 |
DS | 数据段基地址 |
SS | 堆栈段基地址;包含传递给函数和过程的数据值 |
ES | 附加段指针 |
FS | 附加段指针 |
GS | 附加段指针;DS,ES,FS,GS用于指向数据段 |
指令指针寄存器 EIP
跟踪要执行的下一条指令码,偏移值或者线性地址;不可直接修改
控制寄存器
确定处理器的操作模式当前正在处理任务的特性
控制寄存器 | 描述 |
---|---|
CR0 | 控制处理器状态和操作模式的系统 |
CR1 | 当前没有使用 |
CR2 | 内存页面错误信息 |
CR3 | 内存页面目录信息 |
CR4 | 支持处理器特性和说明处理器特性的标志 |
不能直接读取或写入,需要通用寄存器“中转”一下
标志位
每个操作都要有一种机制确定操作是否成功
IA-32平台使用1个32位的EFLAGS包含一组状态,控制和系统标志。
1.状态标志 表明处理器进行的数学操作的结果
标志 | 位 | 名称 | 描述 |
---|---|---|---|
CF | 0 | 进位标志 | 无符号整数数学操作最高有效位产生进位或借,置1 |
PF | 2 | 奇偶校验标志 | 奇校验位,使得寄存器和此位1的数目为奇数个 |
AF | 4 | 辅助进位标志 | 用于BCD数学操作 |
ZF | 6 | 零标志 | 操作结果为0,置1 |
SF | 7 | 符号标志 | 设置为结果的最高有效位 |
OF | 11 | 溢出标志 | 带符数正值过大或负值过小时,溢出 |
2.控制标志 控制处理器的特定行为。
当前只定义了一个控制标志-DFF标志(方向标志),控制处理器处理字符串的方式
DF置位(置1)字符串指令自动低递减内存地址一到达字符串的下一个字节
DF位清零(置0)字符串指令自动低递增内存地址一到达字符串的下一个字节
3.系统标志 控制操作系统级别的操作。
应用程序不应该试图修改系统标志
标志 | 位 | 名称 | 描述 |
---|---|---|---|
TF | 8 | 陷阱标志 | 置1时,启用单步模式,每次执行一条指令,等待下一条指令执行的信号。调试汇编程序时极有用 |
IF | 9 | 中断使能标志 | 控制处理器如何响应外部源接受到的信号 |
IOPL | 12和13 | I/O特权级别标志 | 表明当前正在运行的任务的I/O权限级别 |
NT | 14 | 嵌套任务标志 | 控制当前执行的任务是否链接到前一个执行的任务。用于链接被中断和被调用的任务 |
RF | 16 | 恢复标志 | 控制处理器在调试模式如何响应异常 |
VM | 17 | 虚拟8086状态标志 | 表明处理器在虚拟8086状态执行,而不是保护模式实或模式 |
AC | 18 | 对准检查标志 | 和CR0的AM位一起 用于启用内存引用的对准检查 |
VIF | 19 | 虚拟中断标志 | 处理器在虚拟模式中操作时,起到IF 标志位的作用 |
VIP | 20 | 虚拟中断挂起标志 | 处理器在虚拟模式中操作时,标志一个中断正被挂起 |
ID | 21 | 识别标志 | 表示处理器是否支持CPUID 指令 |
参考:
64-ia-32-architectures-software-developer-vol-1-manual
IA32 Instruction Set
《汇编语言程序设计》richard blum著