【mini2440】ARM汇编指令1

指令条件:


一、跳转指令

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当前值,可以通过重新加载R14PC中,来返回跳转

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: → ARMThumb

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                        ; 保持R00, 1,其余位清零

 

8) ORR: 置位某位

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

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

 

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

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

BIC             R0, R0, #%1011             ; R00,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                     ; 传送R0SPSR,但仅修改SPSR   中的控制位域.




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值