侧边栏壁纸
博主头像
BvBeJ的小站 博主等级

行动起来,活在当下

  • 累计撰写 23 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

x86_64与ARM64常用指令对比分析

BvBeJ
2025-03-31 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

x86_64(AMD64/Intel64)和ARM64(AArch64)是两种主流的64位处理器架构,其指令集设计分别基于CISC(复杂指令集)和RISC(精简指令集)理念,导致常用指令类型和执行方式存在显著差异。以下是两者的核心指令类别及典型示例:


一、x86_64常用指令

x86_64指令集以兼容性和功能丰富性著称,支持变长指令编码(1~15字节)和复杂内存寻址模式。

  1. 数据传输指令

    • MOV:数据复制(如movq %rax, %rbx将RAX值复制到RBX)。
    • PUSH/POP:压栈与出栈操作(如pushq %rbp保存基址指针)。
    • LEA:加载有效地址(如leaq (%rdi,%rsi,4), %rax计算地址并存入RAX)。
  2. 算术运算指令

    • ADD/SUB:加减运算(如addl $5, %eax将EAX加5)。
    • IMUL/IDIV:带符号乘除(如imulq %rbx将RAX与RBX相乘,结果存于RDX:RAX)。
    • INC/DEC:寄存器自增/自减(如decq %rcx将RCX减1)。
  3. 逻辑运算指令

    • AND/OR/XOR:按位与、或、异或(如xorq %rax, %rax清零RAX)。
    • SHL/SHR:逻辑左移/右移(如shlq $2, %rbx将RBX左移2位)。
  4. 控制流指令

    • JMP:无条件跳转(如jmp loop_start跳转到循环起始)。
    • CALL/RET:函数调用与返回(如callq my_function调用函数)。
    • 条件跳转:如JE(相等跳转)、JG(大于跳转)。
  5. SIMD指令(SSE/AVX)​

    • MOVAPS:对齐打包单精度浮点数传输。
    • ADDPD:双精度浮点加法(如addpd %xmm1, %xmm0)。
    • VFMADD132PS:融合乘加运算(AVX指令集)。

二、ARM64常用指令

ARM64指令集采用固定32位长度,注重能效和精简性,支持条件执行和统一寄存器访问。

  1. 数据传输指令

    • LDR/STR:加载/存储寄存器数据(如ldr x0, [x1]从X1地址加载数据到X0)。
    • MOV:寄存器间数据移动(如mov x2, x3将X3值复制到X2)。
  2. 算术运算指令

    • ADD/SUB:加减运算(如add x0, x1, x2计算X1+X2存入X0)。
    • MUL/SDIV:乘法和有符号除法(如mul x0, x1, x2计算X1*X2存入X0)。
  3. 逻辑运算指令

    • AND/ORR/EOR:按位与、或、异或(如eor x0, x0, x0清零X0)。
    • LSL/LSR:逻辑左移/右移(如lsl x1, x2, #3将X2左移3位存入X1)。
  4. 控制流指令

    • B:无条件跳转(如b loop_start跳转至标签)。
    • BL:带链接的函数调用(如bl my_function调用函数并保存返回地址到LR)。
    • 条件分支:如B.EQ(相等跳转)、B.GT(大于跳转)。
  5. SIMD指令(NEON)​

    • ADDV:向量加法(如addv d0, v0.4s对4个单精度浮点元素求和)。
    • LD1/ST1:向量加载/存储(如ld1 {v0.16b}, [x1]加载16字节到向量寄存器)。

三、指令设计差异对比

特性 x86_64 ARM64
指令长度 变长(1-15字节) ​ 固定32位
寄存器数量 16个通用寄存器(RAX-R15)​ 31个通用寄存器(X0-X30)
内存寻址 复杂模式(基址+偏移+比例因子) ​ 简化模式(基址+偏移,支持前/后变址)
条件执行 依赖标志寄存器与条件跳转指令 ​ 支持条件码直接嵌入指令(如CSEL
SIMD集成 需切换至SSE/AVX扩展模式 NEON指令集原生集成

四、典型应用场景

  • x86_64:适用于高性能计算(如服务器、桌面程序),依赖复杂指令优化单线程性能。
  • ARM64:主打能效比,广泛用于移动设备、嵌入式系统及新兴服务器市场。
0

评论区