跳转至

寄存器


处理器内部包含的存储器,叫做寄存器。
访问快,数量少

寄存器分类

  • 通用数据寄存器
  • 段寄存器
  • 指令寄存器
  • 浮点数寄存器
  • 控制寄存器
  • 调试寄存器

16位寄存器示意图

8086
当寄存器扩充到32bit时,部分寄存器名字前会加e,例如:eax,ebx,
当寄存器扩充到64bit时,部分寄存器名字前会加r,例如:rax,rbx

通用寄存器

主要用来零时保存操作数和运算结果等信息

寄存器 全名 作用
AX 累加(Accumulator)寄存器 累加器可用于乘、除、输入/输出等操作
BX 基地址寄存器(Base Register) 也可作为存储器指针来使用
CX 计数寄存器(Count Register) 在循环和字符串操作时,要用它来控制循环次数
在位操作中,当移多位时,要用CL来指明移位的位数
DX 数据寄存器(Data Register) 在进行乘、除运算时,它可作为默认的操作数参与运算
也可用于存放I/O的端口地址
SI source Index Register 字符串操作的源指针
DI destination Index Register 字符串操作的目的指针
BP 基址寄存器(Base Pointer Register) 堆栈数据指针
SP 栈指针(Stack Pointer Register) 指向堆栈的栈顶

段寄存器

段寄存器是根据内存分段的管理模式而设置的。
内存单元的逻辑地址由段寄存器一个偏移量组合而成的

缩写 全名 作用
CS 代码段寄存器(Code Segment Register) 其值为代码段的段值
DS 数据段寄存器(Data Segment Register) 其值为数据段的段值
SS 堆栈段寄存器(Stack Segment Register) 其值为堆栈段的段值
ES/FS/GS 附加段寄存器(Extra Segment Register) 其值为附加数据段的段值

系统地址段寄存器

缩写 全名 描述
GDTR 全局描述符表寄存器GDTR(Global Descriptor Table Register ) 是48位寄存器,用来保存全局描述符表(GDT)的32位基地址和16为GDT的界限
IDTR 中断描述符表寄存器IDTR(Interrupt Descriptor Table Register) 是48位寄存器,用来保存中断描述符表(IDT)的32位基地址和16为IDT的界限
LDTR 局部描述符表寄存器LDTR(Local Descriptor Table Register ) 是16位寄存器,保存局部描述符表LDT段的选择符。
TR 任务状态寄存器TR(Task State Register) 是16位寄存器,用于保存任务状态段TSS段的16位选择符。

gdtr
详细放到寻址里介绍。

指令指针寄存器

名字 作用
IP (Instruction Pointer) 存放下次将要执行的指令在代码段的偏移量

控制寄存器

确定处理器操作模式
cr

控制寄存器 描述
cr0 控制操作模式和处理器状态的系统标志
cr1 当前未使用
cr2 内存页面错误信息
cr3 内存页面目录信息
cr4 支持处理器特性和说明处理器特定能力的标志

可以用过通用通用数据寄存器查看或修改控制寄存器的值。

标志

16位标志寄存器示意图:
flag

状态标志

标志 名称 第几位 说明
CF 进位标志 0 数学运算进位或借位
PF 奇偶校验标志 2 运算结果寄存器中1的个数,偶数个置1,奇数个置0
AF 加法进位标志 4 运算进位或借位
ZF 零值标志 6 运算结果的值是否为0
SF 符号标志 7 运算结果是否为负数
OF 溢出标志 11 运算结果是否溢出

控制标志

标志 名称 第几位 说明
TF 陷阱标志 8 设置为1启动单步模式
IF 中断使能标志 9 是否处理外部收到的终端信号
IOPL IO特权级别标志 12,13 表明当前运行任务的IO特权等级
NT 嵌套任务标志 14 当前任务是否链接到前一个任务
RF 恢复标志 16 调试模式如何响应异常
VM 虚拟8086模式标志 17 表明处理器在虚拟8086模式
AC 对准检测标志 18 启用内存引用的对准检查
VIF 虚拟中断标志 19 虚拟模式中同IF
VIP 虚拟终端挂起标志 20 虚拟模式中表示一个中断被挂起
ID 识别标志 21 是否支持CPUID指令

浮点数寄存器

FPU

floating-point unit
暂时不关注,略...

多媒体扩展

MMX

multimedia extension
暂时不关注,略...