一、汇编语言基础
(断断续续的记录自己的笔记。。。2018-10-11)
1. mov指令
基本用法: mov r0, #0
mov指令是赋值指令,用法如上,把立即数0放入到寄存器r0中。
2. bl指令
bl是跳转指令,1)跳转到某个位置去执行可以是汇编语言中的标号,也可以是某个c文件中的函数。2)把返回地址保存到lr寄存器中,返回地址就是下一条指令的地址
3. ldm和stm
这两个和ldr、str是不同的,ldm和stm一次可以操作多个寄存器或者操作多次内存,目前我还没写过这个代码,只是在反汇编文件文件中看到过,比如我学过一个,如下:
ldmia sp, {fp,sp,pc}
...
stmdb sp!, {fp,ip,lr,pc}
ia和db是完成操作而后地址递增和地址先减而后完成操作。以第二条来说,先减在存,把fp、ip、lr、pc寄存器的压入栈中,这几个寄存器是有顺序的,按照标R的标号,高标号存在高地址。sp后面的!是sp最后的值是修改过的值。这条指令:sp先减,再存pc(R15);再减,再存lr..................
4. ldr和str
ldr是读寄存器,也可以像mov那样用,当操作数太大就不能用mov,必须用ldr,因为mov不能操作一个特别大(超出范围的数),而伪指令ldr可以,伪指令不是真的汇编指令,在编译时候,他会被拆分成几条真的汇编指令,完成工作。一次只操作一个寄存器或者操作一次内存
str是写寄存器。用法如下:把数0x12345678放到寄存器r0中,再把这个数写入大r1指的地址中。
ldr r0, =0x12345678 str r0, [r1]
二、C语言基础
浙公网安备 33010602011771号