arm汇编相关

#cmp

Rn - Rm(operand)

 

#tst

logical AND

 

#LDR用法(摘自ARM嵌入式系统开发一书)

数据                        基址寄存器                示例

mem[base+offset]  基址寄存器加上偏移    ldr r0,[r1,#offset]!

mem[base+offset]  不变                         ldr r0,[r1,#offset]

mem[base]             基址寄存器加上偏移    ldr r0,[r1],#offset

 

#在反汇编中出现如: ldr r3,[pc,#0xc], 这里的pc为当前pc加8,也即要取的那条指令的地址.

 

#stmia sp! [r4-r6, lr] @lr为最高地址

push lr

push r6

push r5

push r4

 

"!"表示本身也要加或减.

 

#frame pointer之后不会再修改sp

 

#C++中this指针是存放在r0的,因为C++的第一个参数就是this指针.

 

#一般的函数调用:

1.保存r4-r6,lr到sp

2. 为local变量, 分配sp空间.

3.分配完有的sp就是frame pointer

4. func body

5. 恢复r4-r6, lr

6. return to caller

 

当参数的个数小于等于4个时,

r0-r3用来传递参数。

如果大于4个,用堆栈来传递参数。

r0用来传递返回值。


#在GNU的arm汇编中:

FP(frame pointer) 为r11

IP 为r12

你可能感兴趣的:(arm汇编相关)