arm 四种栈
1 空栈
栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出
2 满栈
栈指针指向栈中最后一格数据。每次存入时需要先移动栈指针一格再存入。取出时可以直接取出,然后再移动栈指针
3 增栈
栈指针移动时向地址增加的方向移动的栈
4 减栈
栈指针移动时向地址减小的方向移动的栈
arm 8种后缀
用于多寄存器寻址
ia increase after 先传输 再地址+4
ib increase before 先地址+4,再传输
da decrease after 先传输 再地址-4
db decrease before 先地址-4 再传输
用于堆栈寻址
fd full decrease 满递减栈 (重点掌握 ARM用)
ed empty decrease 空递减栈
fa 满递增栈
ea 空递增栈
stmfd sp!, {r1-r4}
等价于 stmfd sp!, {r1, r2, r3, r4}
等价于 push {r1, r2, r3, r4}, sp = sp -寄存器数量*4(个字节)
入栈 从右往左 r4 -> r1
ldmfd sp!, {r1-r4}
出栈 从左往右 r1 -> r4