Skip to content

i386 架构基础 ​

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

通用寄存器 ​

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

AX 是 EAX 的低 16 位,AH 和 AL 又分别是 AX 的高、低 8 位。

段寄存器与标志 ​

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

段寄存器不能像普通寄存器一样任意参与算术。修改 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