1.ARM有六类指令集:
跳转指令、数据处理指令、程序状态寄存器传输指令、Load/Store指令、协处理器指令、异常中断产生指令
2.ARM中实现程序跳转的方式有两种:
1).通过跳转指令
2).直接向PC寄存器(R15)中写入目标地址值
3. 数据处理指令又可分为3类:
数据传送指令、算术逻辑运算指令、比较指令
部分指令的使用如下:
AND(And 逻辑与操作指令)可以提取寄存器中某些位的值,具体的做法是见杜春雷P69。
ORR(Logical OR逻辑或操作指令)可将寄存器中的某些位设置成1,详见杜春雷P70
EOR(Exclusive OR逻辑异或操作指令)可将进村器中某些位的值取反,详见杜春雷P71
BIC(Bit Clear位清除指令)用于将寄存器中的某些位的值设置成0,详见杜春雷P72
TST(Test位测试指令)用于测试寄存器中某个位是1还是0,详见杜春雷P73
TEQ(Test Equivalence相等测试指令)用于比较两个数或操作数是否相等,详见杜春雷P74
4.程序不能通过直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换
5.LDR指令的用法:
a.可以用来从内存中读取32位字数据到通用寄存器,然后对数据进行操作
b.当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能
现通过LDR的用法不难总结出
1)LDRB(Load Register Byte字节数据处理指令)的用法如下:
a.读取8位字节数据,然后对其操作(寄存器高24位清零)
b.PC为目标寄存器时,实现程序跳转
2)LDRH(Load Register Halfword半字数据读取指令)的用法如下:
a.读取16位半字节数据,然后对其操作(高16位清零)
b.PC为目标寄存器时,实现程序跳转
6.arm汇编语言中$ 是意思是什么?
在一个符号前使用$,表示程序在汇编时将使用相应的值来代替$后的符号
7.宏汇编技术与子程序:
使用子程序可以节省存储空间及程序设计所花费的时间,也可以提供模块化的程序设计,使程序的调试维护方便,但它也有缺点,例如,使用子程序时保存和恢复相关的寄存器及子程序现场,增加了额外的开销。因此在子程序较短而需要传递的参数较多的可以使用宏汇编技术。