【ARM】指令集与寻址——第三篇

本文详细介绍了ARM指令集中的数据处理指令,包括MOV、加法和减法运算,并探讨了比较指令如CMP及其条件码标志。此外,还讲解了跳转指令如B和BL,以及各种寻址方式,如立即寻址和寄存器寻址等。
摘要由CSDN通过智能技术生成

目录

1、指令分类

1.1、指令

1.2、mov

1.3、移位操作

2、比较指令

2.1、条形码

2.2、数据处理指令

2.2.1、N Z C V条件码标志

2.3.1、ADD(加法)

2.2.2、64位加法

2.3.1、SUB(减法)

2.3.2、64位减法

3、跳转指令

3.1、使用程序计数器PC进行跳转

3.2、B(跳转指令)

3.3、BL(跳转指令)

4、伪操作与伪指令

4.1、伪操作

4.2、数据操作

4.3、加载存储指令

5、寻址方式

5.1、立即寻址

5.2、寄存器寻址

5.3、寄存器间接寻址

5.4、基址变址寻址

5.5、多寄存器寻址

5.6、相对寻址

5.7、堆栈寻址


1、指令分类

  • 数据处理指令∶数据传送指令(mov)、算术逻辑运算指令(ADD、SUM、AND)、比较指令(CMP、TST)

  • 跳转指令:PC赋值跳转、专用跳转指令

  • 存储访问指令:LDR和STR

  • 伪指令:ADR、ADRL、LDR、NOP

1.1、指令

指令:指令是能够被CPU所识别和执行的32位的机器码

机器码

  • 31–28bit:条件段(如:EQ、NE、CS/HS、CC/LO等)

  • 27–26bit:保留位,恒为00

  • 24–21bit:opcode,指令的类型(AND、EOR、SUB、RSB、TST、ADD等)

  • 20bit:该指令是否会影响程序状态字寄存器,是则置一,否则置零

  • 19–16bit:第一个源操作数寄存器Rd

  • 15–12bit:目的寄存器,填充方法同Rn

  • 11–0bit:

  • 指令中的数值数据只有12bit

  • 8bit:来表示数据

  • 4bit:来表示循环右移

1.2、mov

 mov:把一个数移动到目标寄存器

指令格式:

mov{条件{s} 目标寄存器,源数据(寄存器存储,可以是常数,左移数值、右移右移数值)

条件:就表示mov指令是否要执行,如果满足条件就执行mov

s:是否影响CPSR的值

示例(其中的@表示注释):

立即数:由0-255之间的任意的八位数据通过循环右移偶数位能够的得到的数据

如: ​

1.3、移位操作

        算数移动和逻辑移动:算数左移和逻辑左移作用一致

        左移

  • LSL:逻辑左移,低位填0

  • ASL:算数左移,低位填0

@左移

mov r1,#5
mov r2,r1,LSL #2 @ 0101 << 2 = 1 0100(5)
mov r3,r1,ASL #2 @ 0101 << 2 = 1 0100

        右移

  • LSR:逻辑右移,高位填0

  • ASL:逻辑右移,高位填0

  • ASR:算数右移,把高位填补原来高位(0 or 1,看原高位值)


@右移
mov r4,#6
mov r5,r4,LSR #2 @ 0110 >> 2 = 0001(1)
mov r6,r4,asr #2 @ 0110 >> 2 = 0001

示例:

2、比较指令

CMP:把寄存器数据与另一个寄存器(或数值)进行比较,同时会更新CPSR的条件标志值。其实该指令就是执行一个减法,不保存运算结果,只会更新CPSR标志位(表示两个操作数的大小关系)。

2.1、条形码

比较指令(CMP)的简单例子:

(1)当r1=r2=2时如下

mov r1,#2
mov r2,#2
cmp r1,r2 @ r1-r2 @ 比较条件结果
moveq r3,r1,LSL #2 @ 上一个条件结果相等(Z=1),才执行 r3=(r1<<2)
movne r4,r2,LSL #3 @ 上一个条件结果不相等(Z=0),才执行 r4=(r2<<2)

(2)当r1=1,r2=2时如下(与上面对比)

m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

漫漫长夜想学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值