常用的arm汇编指令(3) -学无止尽,积土成山,积水成渊

1. NEGS    R3, R2; 求补指令      带进位加法指令 ADC(Addition Carry);  Bpl是跳转指令,其中pl代表正号+,Bpl也就是当结果为正时,跳转;  ORR(Logical OR)为逻辑或操作指令
2. SMULxy [condition] dest, op1, op2. SMULxy 指令使用有符号 16 位操作数 op1 与 op2 执行乘法。乘法的结果写入 dest。condition 必须是有效值;否则将指令当作 NOP。
3. 逆向减法指令:RSB R0,R1,R2; R0 = R2 – R1 ,  ORR―――――逻辑"或"操作指令, eor是逻辑异或指令

4. BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。

5.ADRL 伪指令:将相对于程序或相对于寄存器的地址载入寄存器中。BCC     branch on carry clear进位标志被清除时转移。
6.BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。

7.BLT Branch if Less Than; CBZ 比较,如果结果为0 就转移。

8.SBC带进位减法指令,即除了加两个数以外,还要把CPSR的C值也要带进来,类似ADC
9.atpcs-ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)的简称,规定了一些子程序间调用的基本规则,哪寄存器的使用规则,堆栈的使用规则和参数的传递规则等。
  1)寄存器的使用规则子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时r0~r3可记作A1~A4。在子程序中,使用寄存器r4~r11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时r4~r11可记作V1~V8。寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作ip。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作lr。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。
  2)堆栈的使用规则
    atpcs规定堆栈采用满递减类型(fd,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。
  3)参数的传递规则
    整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数。子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或者S0返回。

10.ROR OPRD ,m :把由OPRD指定的寄存器或存储器操作数循环右移m所指定的次数,每右移一次,把操作数的最低位同时移入CF和操作数的最高位汇编指令 ror和rol 用高级语言(如C)该如何描述:
   ror eax,cl ==> eax=(eax>>cl)+(eax<<(32-cl));rol eax,cl ==> eax=(eax<<cl)+(eax>>(32-cl));
   头文件STDLIB.H ;unsigned long __cdecl _lrotl(unsigned long, int);循环左移
   unsigned long __cdecl _lrotr(unsigned long, int);循环右移
10.CBZ  比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)
  TST : 测试指令用于将一个寄存器的值和一个算术值做比较。条件标志位根据两个操作数做“逻辑与”后的结果设置。
  BCC 是指当CPSR寄存器条件标志位为0时跳转。  BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。


参考学习:ARM处理器汇编

你可能感兴趣的:(常用的arm汇编指令(3) -学无止尽,积土成山,积水成渊)