Skip to content

i386 架构基础

i386 通常指 32 位 x86 指令集环境。它保留分段模型,但现代平坦内存模型中代码、数据与栈段通常映射到相同线性地址空间。

通用寄存器

寄存器常见职责
EAX算术、函数返回值
EBX通用基址寄存器
ECX计数、移位次数
EDX扩展算术、I/O
ESI / EDI源与目标索引
ESP栈顶指针
EBP栈帧基址
EIP下一条指令地址

AXEAX 的低 16 位,AHAL 又分别是 AX 的高、低 8 位。

段寄存器与标志

  • CS:EIP 指向当前代码位置。
  • SS:ESP 描述当前栈位置。
  • DSES 常用于数据访问;FSGS 也可承载线程局部数据。
  • EFLAGS 中的 ZFCFSFOF 分别表示零、进位、符号和有符号溢出。

段寄存器不能像普通寄存器一样任意参与算术。修改 CS 通常通过远跳转、调用或返回完成。

栈帧示例

asm
push ebp
mov  ebp, esp
sub  esp, 16
; ... 使用 [ebp-4] 等位置保存局部变量
mov  esp, ebp
pop  ebp
ret

经典 32 位 cdecl 约定中,参数由调用者从右到左压栈,返回值位于 EAX,调用者负责恢复参数占用的栈空间。编译器启用优化后可能省略 EBP 栈帧,因此不要把示例序言当成固定规则。

寻址形式

有效地址可写成 base + index * scale + displacement

asm
mov eax, [ebx + ecx*4 + 8]

比例只能是 1、2、4、8。这种形式非常适合访问数组和结构体字段。

SIMD 指令

SSE

SSE2

AVX-512

SIGNAL MAINTAINED · BUILT FROM MARKDOWN