Skip to content

🔧 Assembly(汇编语言)

概述:汇编语言是最低级的编程语言,与计算机硬件架构紧密相关。每条汇编指令几乎都对应一条机器指令,是对 CPU 指令集的人类可读表示。汇编语言让程序员能够对硬件进行最精细的控制。

概述

Assembly 属于 系统 & 高性能语言 分类。汇编语言不是一种统一的语言,而是针对不同 CPU 架构(x86、ARM、MIPS、RISC-V 等)有各自的指令集和语法。

语言特点

  • 极致性能:直接操控 CPU 寄存器和内存,无法更快的执行速度
  • 硬件控制:精确控制每一条指令的执行
  • 无抽象:没有高级语言的结构化抽象,所有逻辑需手动实现
  • 架构相关:x86、ARM、MIPS 等架构的汇编语法各不相同
  • 调试利器:理解汇编是逆向工程和安全分析的基础

Hello World

asm
; x86-64 Linux 系统调用版本
section .data
    msg db "Hello, World!", 10      ; 10 = 换行符
    len equ $ - msg                  ; 计算字符串长度

section .text
    global _start

_start:
    ; write(1, msg, len)
    mov rax, 1          ; sys_write 系统调用号
    mov rdi, 1          ; 文件描述符: stdout
    mov rsi, msg        ; 缓冲区地址
    mov rdx, len        ; 字节数
    syscall

    ; exit(0)
    mov rax, 60         ; sys_exit 系统调用号
    xor rdi, rdi        ; 退出码 0
    syscall

基础语法

寄存器

x86-64 架构的主要寄存器:

asm
; 通用寄存器
RAX - 累加器,函数返回值
RBX - 基址寄存器
RCX - 计数器
RDX - 数据寄存器
RSI - 源索引
RDI - 目标索引
RSP - 栈指针
RBP - 基址指针
R8-R15 - 扩展寄存器

数据传送

asm
mov rax, 42           ; 立即数 → 寄存器
mov rax, rbx          ; 寄存器 → 寄存器
mov rax, [rbx]        ; 内存 → 寄存器
mov [rbx], rax        ; 寄存器 → 内存
mov rax, [rbx + 8]    ; 带偏移的内存访问

算术运算

asm
add rax, rbx    ; rax = rax + rbx
sub rax, 10     ; rax = rax - 10
imul rax, rbx   ; rax = rax * rbx
inc rax         ; rax = rax + 1
dec rax         ; rax = rax - 1

控制流

asm
; 无条件跳转
jmp label

; 条件跳转
cmp rax, rbx
je equal_label      ; 等于时跳转
jne not_equal_label ; 不等于时跳转
jl less_label       ; 小于时跳转
jg greater_label    ; 大于时跳转

; 循环
mov rcx, 10
loop_start:
    ; 循环体
    dec rcx
    jnz loop_start   ; rcx 不为零时继续

函数调用

asm
; 调用函数
call my_function

; 返回
ret

; 函数定义(遵循 System V ABI)
my_function:
    push rbp           ; 保存旧栈帧
    mov rbp, rsp       ; 建立新栈帧
    ; 函数体...
    pop rbp            ; 恢复栈帧
    ret

应用领域

  • 操作系统内核:启动代码、中断处理、上下文切换
  • 设备驱动:硬件驱动的底层实现
  • 性能优化:热点代码的极致优化(编译器内联汇编)
  • 逆向工程:软件安全分析和漏洞挖掘
  • 嵌入式系统:裸机编程和固件开发
  • 编译器开发:代码生成阶段的指令选择

开发环境搭建

  1. 安装汇编器:NASM (sudo apt install nasm) 或 GAS
  2. 编译:nasm -f elf64 hello.asm
  3. 链接:ld -o hello hello.o
  4. 运行:./hello
  5. 调试工具:GDB、objdump、radare2

学习路线

  1. 入门阶段:寄存器和数据类型 → 指令格式 → 基本算术和逻辑
  2. 进阶阶段:内存寻址 → 控制流 → 函数调用约定 → 栈帧
  3. 实战阶段:系统调用 → 与 C 语言混合编程 → 内联汇编
  4. 高级阶段:SIMD 向量化 → 逆向工程 → 漏洞分析

参考资源


返回首页 | 查看所有语言

编程语言技术文档