ARM汇编指令集汇总

本文详细介绍了ARM汇编指令集中的数据处理指令,包括数据传送、算术运算、比较、逻辑运算、测试、乘法指令。重点讲解了MOV、MVN、ADD、SUB、CMP、AND、ORR、EOR、BIC、TST、TEQ等关键指令的格式、功能和使用示例,帮助读者深入理解ARM汇编语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一.汇编数据处理指令

1.数据传送指令

【MOV指令】:它的传送指令只能是把一个寄存器的值(要能用立即数表示)赋给另一个寄存器,或者将一个常量赋给寄存器,将后边的量赋给前边的量。

MOV指令的格式为:MOV{条件}{S} 目的寄存器,源操作数
复制代码
MOV指令中,条件缺省时指令无条件执行;S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例:

MOV R1,R0   ;将寄存器R0的值传送到寄存器R1
MOV PC,R14   ;将寄存器R14的值传送到PC,常用于子程序返回
MOV R1,R0,LSL#3 ;将寄存器R0的值左移3位后传送到R1(即乘8)
MOVS PC, R14	  ;将寄存器R14的值传送到PC中,返回到调用代码并恢复标志位

除了MOV指令外,还有数据取反传送指令MVN。 【MVN指令】

MVN指令的格式为:
MVN{条件}{S} 目的寄存器,源操作数
复制代码
MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例:

MVN R0,#0   ;将立即数0取反传送到寄存器R0中,完成后R0=-1(有符号位取反)

2.算术运算指令

(1)【加法指令】:ADD

ADD指令的格式为:
ADD{条件}{S} 目的寄存器,操作数1,操作数2
复制代码
ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。

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

(2)【带进位的加法指令】:ADC
ADC指令的格式为:
ADC{条件}{S} 目的寄存器,操作数1,操作数2

ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。
它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
以下指令序列完成两个128位数(此处应为两个四字数相加)的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器R3~R0:

ADDS  R0,R4,R8          ; 加低端的字,R0=R4+R8
ADCS  R1,R5,R9            ; 加第二个字,带进位,R1=R5+R9
ADCS  R2,R6,R10       ; 加第三个字,带进位,R2=R6+R10
ADC  R3,R7,R11       ; 加第四个字,带进位,R3=R7+R11

(3)【减法指令】:SUB
SUB指令的格式为:
SUB{条件}{S} 目的寄存器,操作数1,操作数2

SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。
指令示例:

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

(4)【带借位减法指令】:SBC
SBC指令的格式为:
SBC{条件}{S} 目的寄存器,操作数1,操作数2

BC指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。
操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
该指令使用进位标志来表示借位,这样就可以做大于32位的减法&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kerve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值