寄存器
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
- 功能: 指向当前使用的堆栈段。
在32位扩展出 Extended ,即EAX
- 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
- 功能: 通常用作堆栈帧的基址指针。它可以帮助访问函数的参数和局部变量。
此外,还有几个段寄存器,它们在32位模式下仍然存在,但在现代的平坦内存模型中,它们的重要性已经大大降低:
- CS (Code Segment)
- 功能: 指向当前执行代码的段。
- DS (Data Segment)
- 功能: 指向当前使用的数据段。
- ES (Extra Segment)
- 功能: 通常用作附加的数据段指针。
- FS and GS
- 功能: 这是在32位x86架构中引入的额外的段寄存器。它们可以用于多种目的,但在某些操作系统中,它们被用于特定的任务,如线程局部存储或操作系统内部结构。
在64位扩展出 Register ,即RAX。“Register”这个词在计算机架构中是一个通用术语,用于表示存储数据的小块硬件。
指令集
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, 依次将其值还回.
出栈前:
出栈后: