寄存器
x86 基本16位寄存器
通用寄存器
AX (Accumulator eXtend)
- 英文名称: Accumulator eXtend
- 功能: 它是主累加器。常用于算术、逻辑和数据传输操作。在许多操作中,如果涉及到一个寄存器,那么默认的寄存器通常是AX。
BX (Base eXtend)
- 英文名称: Base eXtend
- 功能: 通常用作间接寻址的基址。在某些地址模式中,它可以作为一个指针,指向数据。
CX (Count eXtend)
- 英文名称: Count eXtend
- 功能: 通常用作循环计数器。例如,在
LOOP
指令中,它表示循环应该执行的次数。
DX (Data eXtend)
- 英文名称: Data eXtend
- 功能: 通常用于I/O操作和某些乘法和除法操作。例如,在16位乘法中,AX和DX一起作为结果的两部分。
SI (Source Index)
- 英文名称: Source Index
- 功能: 通常用作源索引指针,特别是在字符串操作中。
DI (Destination Index)
- 英文名称: Destination Index
- 功能: 通常用作目标索引指针,特别是在字符串操作中。
SP (Stack Pointer)
- 英文名称: Stack Pointer
- 功能: 指向堆栈的顶部。它用于管理调用堆栈,包括函数调用、返回地址和局部变量。
BP (Base Pointer)
- 英文名称: Base Pointer
- 功能: 通常用作堆栈帧的基址指针。它可以帮助访问函数的参数和局部变量。
段寄存器
CS (Code Segment)
- 英文名称: Code Segment
- 功能: 指向当前执行代码的段。
DS (Data Segment)
- 英文名称: Data Segment
- 功能: 指向当前使用的数据段。
ES (Extra Segment)
- 英文名称: Extra Segment
- 功能: 通常用作附加的数据段指针。
SS (Stack Segment)
- 英文名称: Stack Segment
- 功能: 指向当前使用的堆栈段。
指令指针寄存器
IP(Instruction Pointer)
- 英文名称: Instruction Pointer
- 功能: 用于存储下一条要执行的指令的内存地址
程序状态与控制寄存器
状态标志位(Status Flags):
- 进位标志(Carry Flag,CF): 表示无符号运算的进位或借位。
- 零标志(Zero Flag,ZF): 表示运算结果为零。
- 符号标志(Sign Flag,SF): 表示运算结果为负数。
- 溢出标志(Overflow Flag,OF): 表示有符号运算的溢出。
- 奇偶标志(Parity Flag,PF): 表示运算结果中1的个数的奇偶性。
- 辅助进位标志(Auxiliary Carry Flag,AF): 表示低4位运算的进位或借位。
控制标志位(Control Flags):
- 方向标志(Direction Flag,DF): 控制字符串操作的方向(递增或递减)。
- 中断标志(Interrupt Flag,IF): 控制是否允许外部中断。
- 陷阱标志(Trap Flag,TF): 控制单步调试模式。
系统标志位(System Flags):
- 嵌套任务标志(Nested Task Flag,NT): 表示当前任务是否嵌套在另一个任务中。
- 恢复标志(Resume Flag,RF): 控制调试异常的处理。
- 虚拟8086模式标志(Virtual 8086 Mode Flag,VM): 表示CPU是否处于虚拟8086模式。
- 对齐检查标志(Alignment Check Flag,AC): 控制是否进行内存访问对齐检查。
- 虚拟中断标志(Virtual Interrupt Flag,VIF): 虚拟中断挂起标志。
- 虚拟中断待决标志(Virtual Interrupt Pending Flag,VIP): 虚拟中断标志。
- 标识位(Identification Flag,ID): CPUID指令是否可用。
在32位扩展出Extended
通用寄存器
SS (Stack Segment)
- 英文名称: Stack Segment
- 功能: 指向当前使用的堆栈段。
EAX (Extended Accumulator)
- 英文名称: Extended Accumulator
- 功能: 它是主累加器,常用于算术、逻辑和数据传输操作。在许多操作中,如果涉及到一个寄存器,那么默认的寄存器通常是EAX。
EBX (Extended Base)
- 英文名称: Extended Base
- 功能: 通常用作一个指针或基址,特别是在某些地址模式中。
ECX (Extended Count)
- 英文名称: Extended Count
- 功能: 通常用作循环计数器或迭代次数。例如,在
LOOP
和REP
指令中,它表示操作应该执行的次数。
EDX (Extended Data)
- 英文名称: Extended Data
- 功能: 在某些乘法和除法操作中,EDX和EAX一起作为结果的两部分。它也可以用于I/O操作和其他数据操作。
ESI (Extended Source Index)
- 英文名称: Extended Source Index
- 功能: 通常用作源索引指针,特别是在字符串和数组操作中。
EDI (Extended Destination Index)
- 英文名称: Extended Destination Index
- 功能: 通常用作目标索引指针,特别是在字符串和数组操作中。
ESP (Extended Stack Pointer)
- 英文名称: Extended Stack Pointer
- 功能: 指向堆栈的顶部。它用于管理调用堆栈,包括函数调用、返回地址和局部变量。
EBP (Extended Base Pointer)
- 英文名称: Extended Base Pointer
- 功能: 通常用作堆栈帧的基址指针。它可以帮助访问函数的参数和局部变量。
段寄存器
CS (Code Segment)
- 功能: 指向当前执行代码的段。
DS (Data Segment)
- 功能: 指向当前使用的数据段。
ES (Extra Segment)
- 功能: 通常用作附加的数据段指针。
SS (Stack Segment)
- 功能: 指向当前使用的堆栈段。
FS and GS
- 功能: 这是在32位x86架构中引入的额外的段寄存器。它们可以用于多种目的,但在某些操作系统中,它们被用于特定的任务,如线程局部存储或操作系统内部结构。
指令指针寄存器
EIP(Instruction Pointer)
- 功能: 用于存储下一条要执行的指令的内存地址
程序状态与控制寄存器
64位寄存器
在64位扩展出 Register ,即RAX。“Register”这个词在计算机架构中是一个通用术语,用于表示存储数据的小块硬件。
通用寄存器
RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14, R15
段寄存器
- CS: 代码段寄存器
- DS: 数据段寄存器
- SS: 栈段寄存器
- ES: 附加段寄存器
- FS: 附加段寄存器
- GS: 附加段寄存器
指令指针寄存器
RIP: 64位指令指针寄存器
程序状态与控制寄存器(Flags Register)
RFLAGS: 64位标志寄存器,包含各种状态标志位,如进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)等。
指令集
x86
- 描述: 这是一个32位指令集,最初由Intel为其微处理器设计的。它起源于1970年代末的Intel 8086/8088微处理器。
- 特点: 32位寄存器、32位内存寻址。
x86_64/x64
- 描述: 这是x86架构的64位扩展,最初由AMD设计并命名为AMD64。后来,Intel也采用了这种设计,并将其称为Intel 64或简称x64。
- 特点: 64位寄存器、64位内存寻址、向后兼容x86指令集。
amd64
- 描述: 这实际上是AMD为其64位扩展到x86架构的指令集命名的另一个名称。它与x86_64或x64是同义词。
- 特点: 与x86_64/x64相同。
arm32
- 描述: 这是ARM架构的32位版本。ARM是一种RISC(精简指令集计算)架构,最初设计用于低功耗应用。
- 特点: 32位寄存器、32位内存寻址、低功耗设计。
- 应用:
- 智能手机和平板电脑: 早期的Android和iOS设备主要使用32位ARM处理器。
- 嵌入式系统: 许多嵌入式设备,如家用路由器、智能家居设备和工业控制器,使用32位ARM处理器。
- 微控制器: ARM Cortex-M系列是为微控制器设计的32位RISC核心,用于各种低功耗和实时应用,如穿戴设备、传感器和其他IoT设备。
- 开发板: 如Raspberry Pi的早期版本使用了32位ARM处理器。
arm64
- 描述: 这是ARM架构的64位版本,也称为AArch64。
- 特点: 64位寄存器、64位内存寻址、低功耗设计、与32位ARM指令集不完全兼容。
- 应用
- 现代智能手机和平板电脑: 大多数现代Android设备和Apple的iPhone和iPad(从iPhone 5s和iPad Air 2开始)都使用64位ARM处理器。
- 服务器: ARM64架构也被用于某些服务器解决方案,因为它提供了高效、低功耗的计算能力。
- 桌面和笔记本电脑: Apple的M1芯片,用于其最新的MacBook Air、MacBook Pro和Mac mini,是基于ARM64的。
- 开发板: 如Raspberry Pi 3B+和Raspberry Pi 4使用了64位ARM处理器。
- 高性能计算: 一些超级计算机也开始采用ARM64架构,因为它在某些计算密集型任务中提供了优越的性能和效率。
pushad
通用寄存器压栈。寄存器的入栈顺序依次是:EAX,ECX,EDX,EBX,ESP(初始值),EBP,ESI,EDI.
2. popad
通用寄存器出栈, 依次出栈,顺序为EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX, 依次将其值还回.
出栈前:
出栈后: