ARM第二课总结

来源:互联网 发布:python编辑器 知乎 编辑:程序博客网 时间:2024/05/17 08:12

一、ARM指令集,六类指令

    1、跳转指令:

    B 跳转

    BL 带返回的跳转,将下一条指令的地址保存到R14(LR)中

    BLX 带返回且切换状态的跳转

    BX 不带反回,但是有状态切换的跳转

    条件:

EQ    Z置位                              相等

NE    Z清零                              不相等

CS    C置位                              无符号数大于或等于

CC    C清零                              无符号数小于

MI     N置位                              负数

PL    N清零                               正数或零

VS    V置位                               溢出

VC    V 清零                              未溢出

HI    C置位Z清零                       无符号数大于

LS    C清零Z置位                       无符号数小于或等于

GE    N等于V                             带符号数大于或等于

LT    N不等于v                           带符号数小于

GT    Z清零且N等于V                带符号数大于

LE    Z置位或N不等于V             带符号数小于或等于

AL    忽略                                   无条件执行

    2、数据处理指令

a、数据传送

    MOV  Rd    ,#1

    MVN   Rd   ,#1

    MUL   Rd,Rm,Rs

b、逻辑运算

    ANDS

    ANDEQ

    ORR

    EOR

    BIC    R0,R0,#%1011        位清除:取反,相与

c、比较指令

    CMP

    CMPGT(条件)

d、移位指令

    LSL                         逻辑左 

    LSR                        逻辑右

    ASR                        算数左

    ROR                       算数右

    RRX                       扩展循环左           加入cpsr中的C位

3、状态寄存器指令

    MRS   R1,CPSR   读取

    MSR   SPSR  R1     存储

4、存储器访问

    LDR    加载(条件)

    STR    存储(条件)

5、交换指令

    SWP    R0,R0,[R1]    R0与[R1]内容交换

6、软终端指令

    SWI   隐式显示

伪指令:

GBLA,GBLL,GBLS:声明全局变量。


LCLA,LCLL,LCLS:声明局部变量。


SETA,SETL,SETS:给变量赋值。


RLIST:为通用寄存器列表定义名称

 

LDR    区别于  指令LDR   加=为伪指令,加#为指令  

ADR    转化为ADD 或者SUB

ADRL   转化为俩次ADD或者SUB

NOP   延时,CPU执行MOV R0,R0