汇编手册
2025年1月13日大约 2 分钟
速记
sp指向栈顶bp为基指针
当基址针被赋予栈顶的值时,会进行新的栈帧创建s[]:代表内存地址,里面还可以写寄存器。表示寄存器指向的内存地址
arm
函数
lsl 目标寄存器 源寄存器 寄存器或立即数 将源寄存器的值左移立即数位,赋值给目标寄存器sdiv 目标寄存器 源寄存器 寄存器或操作数将源寄存器的值除以寄存器的值或操作数,赋值给目标寄存器
add
add 目标寄存器 第一个操作数寄存器 第二个操作数寄存器或立即数
存值
str
- str将一个寄存器的值存储到连续的内存地址中
str 寄存器 [寄存器,偏移量]
stp
stp 寄存器1 寄存器2 [存储的内存位置]- stp将一对寄存器的值存储到连续的内存地址中
tips:若以[内存地址]!为结尾还可以进行更新栈指针sp
取值
ldr
- 从指定的内存地址取一个双字给予寄存器
无条件跳转
b:无条件跳转到指定的标签或地址
bl:无条件跳转到指定的标签的或地址,并将返回地址保存到链接寄存器LR中
条件分支
bne:不等于
条件分支
test指令的行为
如果 EAX 的值为零,
test eax, eax会使零标志(ZF)被设置为 1。如果 EAX 的值不为零,零标志(ZF)会被清零。
cmp 指令的行为
相减操作:
cmp指令执行operand1 - operand2的操作。设置标志位:根据相减的结果设置标志寄存器中的标志位,主要的标志位包括:
ZF(Zero Flag):如果结果为零,则 ZF 设置为 1,否则为 0。
SF(Sign Flag):如果结果为负数,则 SF 设置为 1,否则为 0。
CF(Carry Flag):如果发生借位,则 CF 设置为 1,否则为 0。
OF(Overflow Flag):如果结果溢出,则 OF 设置为 1,否则为 0。
相减的结果会影响这些标志位