汇编基础教程
汇编是唯一能真正”直接操作硬件”的编程语言。C 语言被称为”可移植汇编”,但有一些操作 C 根本做不到——特权指令(in/out、cli/sti、rdmsr/wrmsr)只能由汇编发出、裸机第一行代码只能是汇编、中断入口只能是汇编 。本教程立足 RootStack 体系的底层视角,为你揭开从键盘、串口、显存到 CPU 控制寄存器的全部硬件操控秘密。
本教程假设你已有 C 或 C++ 基础,了解 C++ 变量与类型 和基本的 计算机组成原理 概念。
教程结构
汇编基础/
├── 汇编目录.md <-- 你在这里
├── 1基础/ (4篇) 语言基础: 寄存器/指令/调用约定/调试工具
│ ├── 01_寄存器与指令基础.md
│ ├── 02_栈与调用约定.md
│ ├── 03_C++在汇编层的体现.md
│ └── 04_工具链与调试环境.md
├── 2硬件操作/ (11篇) 核心: 如何用汇编直接操作硬件
│ ├── 00_硬件操作总览.md 特权级/权限表/两条访硬路径地图/实验环境
│ ├── 01_Port_IO与MMIO.md in/out 指令、MMIO 访存=设备、x86 端口空间
│ ├── 02_特权级与系统寄存器.md Ring0-3、CR0-CR4、CPUID、MSR、全局描述符表
│ ├── 03_内联汇编精通.md GCC asm 完备约束、clobber、内存屏障、原子指令
│ ├── 04_中断与IDT.md IDT/PIC 8259 编程/ISR 全汇编写法/iret
│ ├── 05_串口UART实战.md 16550 端口编程 → 裸机 Hello World(QEMU 可跑)
│ ├── 06_VGA文本模式实战.md 0xB8000 写显存、滚屏、光标控制
│ ├── 07_定时器PIT实战.md 8254 端口编程 → sleep/时钟、RTC
│ ├── 08_键盘输入实战.md PS/2 8042、扫描码、中断驱动 vs 轮询
│ ├── 09_引导启动实机汇编.md 上电入口→实模式→GDT→保护模式→长模式→进入 kernel
│ └── 10_ARM汇编与硬件访问.md ARM/LDR-STR/树莓派 GPIO 真机 MMIO/与 x86 对照
└── 3ARM/ (预留, ARM 内容扩充后拆分)
推荐学习路径
阶段一:汇编语言基础(1 周)
顺序 文件 重点 1 01 寄存器与指令 x86-64 寄存器、mov/lea/add/sub/cmp/jmp、寻址模式 2 02 栈与调用约定 push/pop、call/ret、System V AMD64 ABI、调用者/被调用者保存 3 04 工具链 NASM 安装、ld 链接、objdump 反汇编、gdb layout asm、QEMU 4 03 C++ 汇编实现 this 指针、vtable、构造函数/析构、名称修饰(按需阅读)
此时你已经能阅读 gcc -S 生成的汇编和 objdump 的反汇编输出。
阶段二:硬件操作入门(1-2 周)
阶段三:实战硬件操作(按需,每项 1-2 天)
x86-64 汇编快速参考
通用寄存器
64位 32位 16位 8位 常见用途 raxeaxaxal返回值 rbxebxbxbl被调用者保存 rcxecxcxcl第4参数(Linux)/第1参数(Win) rdxedxdxdl第3参数(Linux)/第2参数(Win) rsiesisisil第2参数(Linux) rdiedididil第1参数(Linux)→C++ this指针 rbpebpbpbpl栈帧基址 rspespspspl栈顶指针 r8~r15r8d~r8w~r8b~通用/第5-6参数(Linux)
NASM ↔ AT&T 语法对照
操作 NASM (Intel) AT&T (GCC 风格) 传送 mov rax, rbxmovq %rbx, %rax取内存 mov rax, [rdi+8]movq 8(%rdi), %rax存内存 mov [rdi], raxmovq %rax, (%rdi)立即数 mov eax, 42movl $42, %eax加法 add rax, 10addq $10, %rax比较 cmp rax, rbxcmpq %rbx, %rax函数调用 call funccall func返回 retret
本教程主力使用 NASM(Intel 语法),关键位置给出 AT&T 对照以衔接 C 教程的内联汇编章节 。
与其他模块的关联
模块 入口 关系 C 语言教程 [[../c语言教程/c目录 C 教程目录]] C++ 教程 [[../cpp教程/cpp目录 C++ 教程目录]] 计算机原理 [[../计算机原理/计算机原理_索引 计算机原理索引]] 操作系统 [[../操作系统/操作系统_索引 操作系统索引]] 内核 [[../内核/内核索引 内核索引]] 红队 (Linux) [[../red_team/总目录与快速查询 红队知识库]]
外部资源