手撕编译原理:汇编语言不会编
NASM
Installation of NASM
version
demo
Makefile
make
glibc-devel
make
查看返回值
运算
add.asm
gdb
跳转
cmp
& jmp
后缀 | 意义
---|---
a | above
e | equal
b | below
n | not
g | greater
l | lower
s | signed
z | zero
标志寄存器 `eflags`
eip
: CPU 接下来要执行的代码
循环
for
, while
, do-while
==> goto
+ if
goto
:jmp
if
:cmp
&jmp
函数
call
+ret
保存现场
传递参数
返回
x86 的环境下,栈是朝着低地址的方向伸长的。
栈:
call
指令保存eip
esp(stack pointer): 寄存器
汇编中发生函数调用相关的指令call和ret
call指令会产生跳转动作,与jmp不同的是,call之后可以通过ret指令跳回来
call和ret的配合是依靠保存eip的值到栈里,返回时恢复eip实现的
esp记录着当前栈顶所在的位置,每次call和ret执行都会伴随着入栈和出栈,也就是esp会发生变化
递归
push
+pop
函数调用相关指令
通过寄存器传递参数和返回值
函数调用后的返回地址会保存到堆栈中
函数的局部状态也可以保存到堆栈中
明天手撕《汇编语言》第3版。
参考:
评论