您的位置:首页 > 其它

【mini2440】ARM汇编指令1

2016-11-13 17:30 260 查看
指令条件:



一、跳转指令

a) 在跳转前保存当前地址:

MOV             LR, PC          ;可以实现4GB地址空间的任意跳转

b) 跳转指令:

可以完成从当前指令向前或者向后的32MB的地址空间的跳转

i. B 直接跳转

ii. BL 待返回的跳转指令

iii. BLX 待返回和状态切换的跳转指令

iv. BX    带状态切换的跳转指令

 

c) B: 有去无回跳转

i. 格式: 

B{条件}        目标地址;

ii. 无条件跳转:

B                    Label                ; 程序无条件跳转到标号Lalel

iii. 有条件跳转:

CMP              R1, #0

 BEQ             Label                 ; R1 == 0

; 当CPSR寄存器中的Z条件码置位时跳转

 

d) BL:  可返回跳转

i. 格式:

BL{条件}        目标地址

ii. 在跳转之前,会在寄存器R14中保存PC当前值,可以通过重新加载R14到PC中,来返回跳转

iii. 可返回跳转:

BL                   Label         ; 当程序无条件跳转到标号Label,同时将当前pc   值保存到R14中

  

e) BLX:  ARM → Thumb

i. 格式:

BLX                目标地址

ii. BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由ARM切换到Thumb状态;

 该指令同时将pc当前内容保存到寄存器R14中:

iii. 调用者: 使用ARM指令集

iv. 子程序: 使用Thumb指令集

 

f) BX: → ARM、Thumb

i. 格式:

BX{条件}        目标地址

ii. BX: 跳转到指令中所指定的目标地址,目标地址可以是ARM指令,也可以是Thumb指令。

 
 

二、数据处理指令

数据处理指令: 数据传送指令 /算术逻辑运算指令
/比较指令
算术逻辑指令:
将运算结果保存在目的寄存器中, 同时更新CPSR中的相应条件标志位.

 
1) MOV

i. MOV{条件}{S}    目的寄存器,源操作数

MOV         R1, R0                         ;
将寄存器R0的值传送到寄存器R1

MOV         PC, R14                      ;
将R14的值传送到PC,子程序返回

MOV         R1, R0, LSL#3           ;
将寄存器R0的值左移3位送到R1

 

 
2) MVN : 取反

i. MVN{条件}{S}    目的寄存器,源操作数

MVN         R0, #0XFF                   ; R0
← ~0XFF

 

3) CMP

把两个寄存器的内容或立即数进行比较,
同时更新CPSR中条件标志位.

i. CMP{条件}         操作数1,操作数2

CMP         R1, R0

CMP         R1, #100

 
4) TST: 测试

i. TST{条件}          操作数1,操作数2
   ; 操作数2是一个位掩码

TST           R1, #%1                  ;
测试R1中最低位是否置位(%表示二进制)

 

5) ADD

i. ADD{条件}{S}     目的寄存器,操作数1,
操作数2

ADD          R0, R1, R2                         ; R0 = R1 + R2

ADD          R0, R2, R3, LSL#1           ; R0 = R2 + (R3 << 1)

 
6) SUB

i. SUB{条件}{S}     目的寄存器,操作数1,
操作数2

SUB          R0, R1, #255                     ; R0 = R1 - 255

SUB          R0, R2, R3, LSL#1           ; R0 = R2 - (R3 << 1)

 
7) AND

i. AND{条件}{S}       目的寄存器,操作数1,
操作数2

AND            R0, R0, #3                        ;
保持R0的0, 1位,其余位清零

 

8) ORR: 置位某位

i. ORR{条件}{S}      目的寄存器,操作数1,
操作数2

ORR           R0, R0, #3                        ;
置位R0的0,1位,其余保持.

 

9) BIC: 清零某位 (Bit Clear)

i. BIC{cond}{S}       Rd, Rn, operand2          ;清除Rn的某位结果放于Rd,operand2为32位掩码

BIC             R0, R0, #%1011             ;
将R0的0,1,3位清零

 

10) MUL

i. MUL{条件}{S}      目的寄存器,操作数1,
操作数2

MUL           R0, R1, R2                       ; R0 = R1 * R2

11) MULS

MULS        R0, R1, R2                        ;同时设置CPSR相关标志位

 
 

三、程序状态寄存器访问指令

PST : Program Status Register, 程序状态寄存器
 
1) MRS : Move PSR to register

MRS{条件}              通用寄存器,程序状态寄存器(CPSR
/ SPSR)

MRS                        R0, CPSR                        ;
传送CPSR的内容到R0

MRS                        R0, SPSR                         ;
传送SPSR的内容到R0

2) MSR : Move register to PSR

MSR{条件}             程序状态寄存器_<域>,操作数

MSR                        CPSR, R0                         ;
传送R0的内容到CPSR

MSR                        SPSR, R0                         ;
传送R0的内容到SPSR

MSR                        CPSR_c, R0                     ;
传送R0到SPSR,但仅修改SPSR   中的控制位域.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息