ARM编程指令二

一、算术指令

1. add指令

功能: 将两个操作数相加,并将结果存储在目标寄存器中。

ADD R0, R1, R2  // R0 = R1 + R2
2. sub指令

功能: 将第二个操作数从第一个操作数中减去,并将结果存储在目标寄存器中。

SUB R0, R1, R2  // R0 = R1 - R2
3.ADC指令- 带进位加法

功能: 将两个操作数相加并加上进位标志的值。

ADC R0, R1, R2  // R0 = R1 + R2 + CARRY
4.SBC指令 - 带借位减法

功能: 将第二个操作数从第一个操作数中减去,并考虑借位标志的值。

SBC R0, R1, R2  // R0 = R1 - R2 - BORROW

5.MUL - 乘法

功能: 将两个操作数相乘,并将结果存储在目标寄存器中。

MUL R0, R1, R2  // R0 = R1 * R2

6.MULS - 有符号乘法

功能: 执行有符号乘法,将结果存储在目标寄存器中。

MULS R0, R1, R2  // R0 = R1 * R2 (有符号)

7.UDIV - 无符号除法

功能: 计算两个无符号整数的商,并将结果存储在目标寄存器中。

UDIV R0, R1, R2  // R0 = R1 / R2 (无符号)

8.SDIV - 有符号除法

功能: 计算两个有符号整数的商,并将结果存储在目标寄存器中。

SDIV R0, R1, R2  // R0 = R1 / R2 (有符号)

9.cmp -比较

功能: 将两个操作数相减,并更新条件标志(不存储结果)。

CMP R0, R1  // 更新标志位,根据 R0 - R1 的结果

10.条件标志位

在这里插入图片描述

标志位含义描述PSR中的位置
N或SNegative当操作结果为负数时设置该标志位,不为负不设置,表示正数第31位
ZZero当操作结果为零时设置该标志位第30位
CCarry当操作结果产生进位或无符号溢出时设置该标志位第29位
V或OOverflow当操作结果产生有符号溢出时设置该标志位第28位

二、跳转指令

  • 在ARM汇编语言中,跳转指令用于改变程序的执行流。
  1. B指令
  • 无条件跳转,B 指令会将 PC 寄存器的值设置为跳转目标地址, 一旦执行 B 指 令,ARM 处理器就会立即跳转到指定的目标地址。如果要调用的函数不会再返回到原来的执行 处,那就可以用 B 指令。
B loop_start  // 无条件跳转到 loop_start 标签
--------------------------------------------------
B stat

start:
	mov r0,#1;
	mov r1,r0;

  1. BL指令
  • 带链接跳转,跳转到指定的标签,并将返回地址存储在链接寄存器(LR)也就是R14
  • 用于实现函数调用子程序调用
    // 主程序部分
    MOV R0, #5        // 将值5存储到R0寄存器中
    BL my_function    // 跳转到my_function标签,并保存返回地址到LR
    // my_function 执行完后,继续执行这里的指令

    // 继续的代码
    B end              // 跳转到程序的结束标签

my_function:
    // 函数体
    ADD R0, R0, #10   // 将寄存器R0的值加上10
    MOV PC, LR        // 从LR寄存器加载返回地址,并跳转回主程序
    // 函数执行结束
end:
    // 程序结束

三、逻辑运算指令

1. AND指令

功能: 对两个操作数执行按位与(如果两个对应的二进制位都为1,则结果位为1;否则结果位为0。)操作,并将结果存储在目标寄存器中。

AND R0, R1, R2  // R0 = R1 & R2,同一为一,否则为0
2. ORR指令

功能: 对两个操作数执行按位或操作,并将结果存储在目标寄存器中。

ORR R0, R1, R2  // R0 = R1 | R2,有1则为1,否则为0
3. EOR指令

功能:对两个操作数执行按位异或操作,并将结果存储在目标寄存器中。

EOR R0, R1, R2  // R0 = R1 ^ R2,相同为1,不相同为0
4. BIC指令

功能: 对第一个操作数执行按位清除操作(与第二个操作数的反码按位与)。简单的说是清除第一个操作数在第二个操作数为1的那些位。

BIC R0, R1, R2  // R0 = R1 & ~R2
A = 11001010
B = 10101100
    01000010


四、条件执行指令
  • 在ARM汇编中,许多指令可以根据条件执行。这些指令通过在指令后添加条件代码后缀来实现条件执行。
条件后缀条件代码含义
EQ0000相等(Z标志位设置)Equal
NE0001不相等(Z标志位未设置) Not Equal
CS/HS0010无符号数大于或等于(C标志位设置)Carry Set / Higher or Same
CC/LO0011无符号数小于(C标志位未设置)MI
MI0100负数Minus
  • 条件指令通常是基于前一条指令(如 CMP 或其他算术/逻辑运算指令)设置的条件标志位(flags)来决定是否执行的。一般是CMP指令
  • 代码示例
CMP R1, R2          // 比较R1和R2的值
ADDEQ R0, R1, R2    // 如果R1等于R2,则执行R0 = R1 + R2
SUBNE R0, R1, R2    // 如果R1不等于R2,则执行R0 = R1 - R2

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值