文章目录
Idea的位数的选择
与电脑系统的位数没关系
与反编译so文件的位数有关
学习技巧:
学习汇编与学习Linux系统指令一样,
不要直接找到arm所有指令然后背这是什么意思,
掌握了常见的指令,剩下的不常见的,
什么时候用到什么时候在去找手册,
1、跳转指令 B(全称:Branch分支的意思)
只要B开头,别管后边有没有别的东西跟着,统统先理解为跳转。
如图:
2、存储器、寄存器:存储数据的(小的数据:寄存器;大的数据:栈)
计算机中的内存,就是为数据服务的;
小的数据放寄存器内,但是寄存器能存的数据太少了,
故将大的东西存在栈内,
3、LDR、STR
~LDR:从存储器中加载数据到寄存器
~STR:将寄存器的数据存储到存储器
理解:就是一个赋值与取值的过程。
举例子:
LDR R8,[R9,#4] 将R9+4地址里的值赋值给R8
LDR R1 = (xxxxx) 将数值xxxxx直接赋值给R1
4、LDM、STM
~LDM:将存储器的数据加载到一个寄存器列表
举例子:
LDM R0,{
R1-R3} 将R0指向存储单元的数据依次加载的R1、R2、R3寄存器
~STM:将一个寄存器列表的数据存储到指定的存储器
5、PUSH、POP
~PUSH:将寄存器值推入堆栈 压栈
~POP:将堆栈值推出到寄存器 出栈
6、MOV
~MOV:将立即数或寄存器的数据传送到目标寄存器
举例子:
MOV R0,#8 R0=8 将#8的值赋值给R0,
MOV R0,R4 将R4的值赋值给R0
7、数据算数运算指令
ADD、SUB、MUL、DIV 即加减乘除
8、 数据逻辑运算指令
与:AND 全1出1
或:ORR 有1出1
异或:EOR 相同为0,不同为1
9、比较指令
~CMP:conpare(比较)
举例子:
CMP R0 #0 R0寄存器中的值与0比较