ARM汇编指令集

跳转指令
    B    
    BL会把当前PC指针的值加4保存到R14里。

MOV{条件}{S}    目的寄存器   ,源操作数
    只能用在通用寄存器的操作
    MOV    R1,R0    将寄存器R0的值传送到R1里
    
MVN{条件}{S}    目的寄存器    ,源操作数
    在传送之前按位取反,即把一个被取反的值传送到目的
    寄存器中。
    S决定指令操作是否影响CPSR中条件标志位的值,没有S
    时指令不更新CPSR中条件标志位的值。

CMP{条件}操作数1,操作数2
    把两个操作数进行比较,同时更新CPSR中条件标志位的值
    该指令进行一次减法运算,不存储结果,只更改条件标志位


TST{条件 }操作数1,操作数2
    把一个寄存器的内容和另一个寄存器的内存或立即数进行按位与运算,并
    更新CPSR中条件标志位的值,当位与结果为0时,EQ位被设置。
     TST R5,#(1<<23)  ;当bit23位为1时,CPSR EQ位被设置



ADD{条件}{S}目的寄存器,操作数1,操作数2
    将两个操作数相加,把结果放在目的寄存器中。
                ;ADD指令
MOV R1,#1      
MOV R2,#2         
MOV R3,#3        
ADD R0,R1,R2 ;R0=R1+R2          
ADD R0,R1,#256 ;R0=R1+256          
                        ADD R0,R2,R3,LSL#1  ;R0=R2+(R3<<1)

SUB{条件}{S}目的寄存器,操作数1,操作数2
    用操作数1减操作数2,将差值放在目的寄存器中
            MOV R1,#100
            MOV R2,#8     
            SUB R0,R1,R2 ;R0=R1-R2      
            SUB R0,R1,#55   ;R0=R1-55

AND{条件}{S}目的寄存器,操作数1,操作数2
    两个操作数进行逻辑与运算,把结果存进目的寄存器中
    常用于屏蔽操作数1的某些位。
            ;AND指令
            MOV R0,#0xff    
            AND R0,R0,#3    ;逻辑与运算,R0 = R0 & 3

ORR{条件}{S}目的寄存器,操作数1,操作数2
    用于两个操作数进行逻辑或运算,把结果存到目的寄存器
    中。该指令常用于设置操作数1的某些位。

BIC{cond}{S}Rd,Rn,operand2
    用于清除Rn中的某些位,把结果存放在Rd中,
    操作数operand2为32位的掩码,如果掩码中设置
    了某一位为1,则清除这一位。 掩码中有1的位清零
            ;BIC指令
            MOV R0,#0x77      
            BIC R0,R0,#0x0b ;将R0的bit0,bit1,bit3清零,其余位不变



MUL{条件}{S}目的寄存器,操作数1,操作数2
    将操作数1和操作数2的乘法运算,结果存到目的寄存器
    根据结果更新CPSR中相应条件标志位。
    操作数1和操作数2均为32位的有符号数或无符号数。


MRS{条件}通用寄存器,程序状态寄存器(CPSR,SPSR)
    将程序状态寄存器的内容传送到通用寄存器中,
    当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存
    器的内容读入通用寄存器,修改后再写回程序状态寄存器
    
MSR{条件}程序状态寄存器(CPSR,SPSR)_<域>,操作数
    将操作数的内容传送到程序状态寄存器的特定域中。
    位[31:24]为条件标志位域,用 f表示,位[23:16]为状态位域,用 s表示
    位[15:8]为扩展位域,用 x表示    位[7:0]为控制位域,用 c表示
    ;MRS指令(将CPSR或者SPSR的内容传送到通用寄存器)
            MRS R0,CPSR ;传送CPSR的内容到R0    
            MRS R1,SPSR ;传送SPSR的内容到R1

LDR{条件}目的寄存器,<存储器地址>
    从存储器中将一个32位的字数据传 送到目的寄存器中,通用寄存器
          ;LDR指令
            LDR R1,=0x30003100 ;R1=0x30003100,
            LDR R0,[R1] ;R0=[R1] 
            LDR R0,[R1,#4]          ;R0=[R1+4]
读32位的数

STR{条件}源寄存器,<存储器地址>
    用于从源寄存器中将一个32位的字数据 传送到存储器
          ;STR指令,内存地址0x30003100=0xab
        LDR     R1,=0x30003100  ; C : \
        MOV R0,#0xab  i l e s
        STR     R0,[R1] ;将R0中的字数据写入以R1为地址的存储器中 
        STR     R0,[R1,#8]          ;将R0中的字数据写入以R1+8为地址的存储器中
   
LDM    批量数据加载指令
LDM{条件}{类型}基址寄存器{!},寄存器列表{^}
从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器
之间传送数据,常见用途是将多个寄存器的内容入栈或出栈。
LDMFD R13!,{R0,R4-R12,PC}     出栈

STM    批量数据存储 指令
STMFD R13!,{R0,R4-R12,LR}     入栈    !表示自动增加,跟*AR0+一样

SWP{条件}目的寄存器,源寄存器1[,源寄存器2]
    将源寄存器2所指向的存储器中的字数据传送到目的寄存器中,
    同时将源寄存器1中的字数据传送到源寄存器2所指向的存储器中。
    当源寄存器1和目的寄存器为同一个寄存器时,指令交换该寄存器
    和存储器的内容。

LSL
通用寄存器,LSL操作数    逻辑左移
MOV R0,R1,LSL#2    将R1中的内容左移两位后传送到R0中。

ROR
通用寄存器,ROR操作数    循环右移
MOV    R0,R1,ROR#2    将R1中的内容循环右移两位后传送到R0中。

异常产生指令
SWI    软件中断指令
    SWI{条件}24位的立即数
    SWI用于产生软件中断,以便用户程序能调用操作系统的系统API,
    操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24
    位的立即数指定用户程序调用的API类型。
    SWI    0x02
    该指令调用操作系统编号位02的系统例程。

BKPT    断点中断指令



转载于:https://my.oschina.net/u/860952/blog/549210

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值