秋逸

x86 汇编基础

eg: mov mov

寄存器

E__

  • AX, BX, CX, …: 通用寄存器的 E 去掉的话, 意思是使用该寄存器的低十六位.
  • AH, BH, CH, …: 表示使用 AX, BX, CX, …的高 8 位
  • AL, BL, CL, …: 表示使用 AX, BX, CX, …的低 8 位

HL

各种寻址方式

常用汇编指令

x86 汇编语言中两个操作数不可以都来自主存, 不然访存次数太多了, 执行会很慢

常见算术运算指令

算术运算指令 add/sub

常见逻辑运算指令

逻辑运算指令

AT&T 格式

  • AT&T: Unix/Linux 常用格式(贝尔实验室发明)
  • Intel: Windows 常用

AT&T v.s. Intel

如此看来还是 Intel 格式比较简洁, 符合笔者的口味().

if-else

if else

循环

for

loop:

LOOP

函数调用

x86 系统中, 默认以 4 字节作为栈的操作单位.

EBP堆栈基指针, 指向当前栈帧的”底部(高地址)”,

ESP堆栈顶指针, 指向当前栈帧的”顶部(低地址)”

  • call: 把 IP 压栈, 然后无条件转移至被调用函数的第一条指令.
  • ret: IP 旧值出栈, 无条件转移至旧值.
  • Push <val>: ESP-4, 再把<val>压入
  • Pop <Addr>: 栈顶元素写入<Addr>, 再让 ESP+4

切换栈帧

进入函数时:

push ebp
mov ebp, esp

等价于:

enter

退出函数时:

mov esp, ebp
pop ebp

等价于:

leave

妙啊

总结 总结

CISC 和 RISC

CISC &#x26; RISC

x86汇编基础
: 杨秋逸
https://yangqiuyi.com/blog/计组/x86汇编基础/
© 2025 杨秋逸 . All rights reserved.