• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

汇编知识

汇编语言知识点 云涯 4年前 (2020-09-07) 2188次浏览

寄存器

 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)

  1. 英文名称: Instruction Pointer
  2. 功能: 用于存储下一条要执行的指令的内存地址

程序状态与控制寄存器

 

状态标志位(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
  • 功能: 通常用作循环计数器或迭代次数。例如,在LOOPREP指令中,它表示操作应该执行的次数。

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)

  1. 功能: 用于存储下一条要执行的指令的内存地址

程序状态与控制寄存器

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.

images

2. popad

通用寄存器出栈, 依次出栈,顺序为EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX, 依次将其值还回.

出栈前:

images

出栈后:

images


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:汇编知识
喜欢 (0)