汇编的组成
1、汇编指令:
数据处理指令
跳转指令
内存读写指令
状态寄存器传送指令
异常产生指令
协处理器指令
2、伪操作
.text .global .if .else .endif.....
3、伪指令
4、注释
立即数
能够经过编码后保存到指令空间中直接当作指令一部分去执行的数据叫做立即数
一个32位指令空间中预留了12位空间保存当前操作数,可以通过某一个规则对操作数进行处理,将处理后的数值存放在这个12位空间中。所以处理完能够保存到12位空间中的数据就是立即数,否则不是。
数据的处理规则:
将操作数循环右移偶数位 ,如果能够得到一个0-255内的数据,就说明这个数据是一个立即数。
反过来,得到的数据循环右移偶数位,也可以得到操作数
指令中操作数的12位空间分为低8位和高4位,低8bit保存循环右移得到操作数的那个0-255内的数字高4位保存0-255内的数据循环右移的偶数位/2
注意:这个数据或者数据的取反值,其中之一是立即数,另一个也是
1、数据指令
1.mov{条件码} 目标寄存器 操作数 解释:将操作数搬移到目标寄存器中
2.mvn{条件码} 目标寄存器 操作数 解释:将操作数按位取反后结果搬移到目标寄存器中
3.逻辑左移: lsl{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数据左移第二操作数位数,结果保存到目标寄存器中
4.逻辑右移 lsr{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数据右移第二操作数位数,结果保存到目标寄存器中
5.循环右移 ror{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数据循环右移第二操作数位数,结果保存到目标寄存器中
6.与运算 and{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数和第二操作数进行与运算,结果保存到目标寄存器中
7.或运算 orr{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数和第二操作数进行或运算,结果保存到目标寄存器中
8.异或运算 eor{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数和第二操作数进行异或运算,结果保存到目标寄存器中
9.按位取反 mvn
10.按位清零运算 bic{条件码} 目标寄存器,第一操作寄存器,第二操作数 解释:将第一操作寄存器的数和第二操作数进行与运算,结果保存到目标寄存器中
2、算数指令
1.加法指令 add{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 解释:目标寄存器=第一操作寄存器+第二操作数
2.考虑cpsr条件位的加法指令 adc{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 解释:目标寄存器=第一操作寄存器+第二操作数+cpsr寄存器c位的值
3.减法指令 sub{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 解释:目标寄存器=第一操作寄存器-第二操作数
4.考虑cpsr条件位的减法指令 SBC{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 解释:目标寄存器=第一操作寄存器-第二操作数-cpsr寄存器c位的取反值
5.乘法运算 mul{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 解释:目标寄存器=第一操作寄存器*第二操作数
3、比较指令
cmp:
第一操作寄存器,第二操作数 解释:将第一操作数和第二操作寄存器进行比较 比较指令的本质就是比较的两个数进行减法运算,运算的结果应先到CPSR的NZCV位
注意:
比较指令通过会和条件码一起使用:
1.先进行比较
2.比较后的指令后面加条件码,条件码对应的条件满足后指令才会指令
tst:
目标寄存器,#(0X1<<N) 解释:目标寄存器和第一寄存器与,如果有相同位都为1那么Z置1,否则置0;
TEQ :
目标寄存器,第二操作数 解释:判断目标寄存器的值是否和第二操作数相等 注意:TEq只能影响CPSR寄存器的z,无法影响c和v位
4、跳转指令
b 标签
解释:跳转到指定的标签下,跳转后LR寄存器不保存程序返回地址
bl 标签
解释:跳转到指定的标签下,跳转后LR寄存器保存程序返回地址
5、内存读写指令
写:
1.str 目标寄存器,[目标地址] 解释:将目标寄存器中四字节数据写入到目标地址对应的内存中
2.strh 目标寄存器,[目标地址] 解释:将目标寄存器中2字节数据写入到目标地址对应的内存中
3.strb 目标寄存器,[目标地址] 解释:将目标寄存器中1字节数据写入到目标地址对应的内存中
从内存中读:
1.ldr 目标寄存器,[目标地址] 解释:从目标地址对应的内存中读取4字节数据保存到目标寄存器中
2.ldrh 目标寄存器,[目标地址] 解释:从目标地址对应的内存中读取2字节数据保存到目标寄存器中
3.ldrb 目标寄存器,[目标地址] 解释:从目标地址对应的内存中读取1字节数据保存到目标寄存器中
6、 状态寄存器读写
读状态寄存器:
MRS 目标寄存器,CPSR
解释:读取CPSR寄存器数值,保存到目标寄存器 修改状态寄存器
MSR CPSR,操作数
解释:修改CPSR寄存器的数值为操作数
注意:可以在特权模式下通过修改CPSR数值切换到USER模式 但是无法在useR模式下修改CPSR数值切换到特权模式 想要进入特权模式执行,需要有对应的特权发生,处理器会自动进入该模式