ARM编程指令二

news2024/9/23 13:28:32

一、算术指令

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强化学习机械臂

一.前言 这里记录一下我学习强化学习的一些知识,并希望在今后可以通过仿真成功验证算法,如果时间允许的情况下希望可以结合到真实机械臂上。 二.学习过程 机械臂强化学习实战(stable baselines3panda-gym) 这里我先用anaconda创…

【原创教程】电气电工常用剥线钳和压线钳(入门篇)

今天我们来看一下电气电工经常会用到的工具,剥线钳和压线钳。 首先我们看剥线钳做什么用?主要就是剥线,让内部的铜丝裸露。我们来看一下,我们经常用到的剥线钳。 1、带刃口剥线钳 2、自动剥线钳 3、鸭嘴剥线钳 下面看压嘴剥线钳…

Nodejs的使用

1.安装nodejs服务器。 java 项目可以运行在 tomcat 服务器,开始完成前后端完全分离。前端有自己独立的工程。我们需 要把前端独立的工程运行起来。 --- 运行在 nodejs 服务器下。 理解为 tomcat 服务器 安装成功后在命令窗口查看 1.1 安装npm java 项目需要依赖…

finalshell连接kali-Linux失败问题略谈

如果你正在使用fianlshell或者xshell等终端软件远程连接Linux进行工作,但是突然有一天,你死活连不上了,报错提示如下: java.net.ConnectException: Connection refused: connect 就像这样: 哪怕是重装虚拟机&#xff0…

HardSignin _ 入土为安的第十二天

有壳 55 50 58 用010 把vmp改成upx ctrlf2,查找main函数 点第三个 Ctrlx交叉引用 把花指令改了90 一共三处 找db按c 找函数按p封装,按f5反编译函数 smc 用pythonida绕一下 from ida_bytes import * addr 0x00401890 for i in range(170):patch_byte(addr i,…

排序算法----冒泡,插入,希尔,选择排序

冒泡排序 原理 冒泡排序实际上是交换排序,将大的数据通过交换的方式排到一边,依次进行 代码实现 void Swap(int* p1, int* p2) {int temp *p1;*p1 *p2;*p2 temp; }void BullerSort(int* a, int n) {for (int end n - 1; end > 0; end--){for …

卷积神经网络理论(CNN)·基于tensorflow实现

传统神经网络的输入是一维的数据(比如28*28的图片,需要转化为一维向量)。 而卷积神经网络的输入是一个三维的(比如RGB)。 结构 卷积神经网络有以下结构: 输入层卷积层池化层全连接层 输入层 顾名思义,输入层就是输入数据(可以是图片等数…

仅缺一位作者,年内书号

《工程测量学概论》缺第三 《风景园林设计与施工技术研究》缺第二 《对外汉语教学方法与实践研究》缺第三 《基于视觉传达设计下的民间艺术发展研究》缺第三 《英语教学基础与翻译技巧》缺第三 《博物馆学体系与博物馆探究学习》缺第三 《新时期高校辅导员工作与队伍建设研究》…

迈向数智金融:机器学习金融科技新纪元的新风采

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

怎么通过 ssh 访问远程设备

文章目录 什么是 SSH背景环境配置前置准备在 linux 系统中安装 ssh 组件 什么是 SSH ssh 全称是 Secure Shell, 有时候也被叫做 Secure Socket Shell, 这个协议使你能通过命令行的方式安全的连接到远端计算机。当连接建立就会启动一个 shell 会话,这时你就能在你的…

Kubernetes中间件监控指标解读

监控易是一款功能强大的IT监控软件,能够实时监控和分析各种IT资源和应用的状态,为企业提供全面而深入的监控服务。在Kubernetes中间件监控方面,监控易提供了详尽的监控指标,帮助用户全面了解Kubernetes集群的运行状态和性能表现。…

一键PDF翻译成中文,划重点轻松get

现在信息多得跟海一样,PDF文件里全是宝贵的资料和文章。但是,看着满屏幕的外国字,你是不是也头疼过?别发愁,今天咱们就来好好聊聊pdf翻译成中文的工具,帮你轻松搞定语言障碍,一点按钮&#xff0…

电测量数据交换DLMS∕COSEM组件第61部分:对象标识系统(OBIS)(上)

1.范围 GB/T 17215.6的本部分规定了对象标识系统(OBIS)的总体结构并将测量设备中的所有常用数据项映射到其标识代码。 OBIS为测量设备中的所有数据都提供唯一的标识符,不仅包括测量值,而且还包括仪表设备的配置或获取测量设备运行状态的抽象数据。本部分定义的ID代码用作标…

论文解析——CRNN算法

论文paper地址:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 本文的主要目的是识别图片中的序列文字的识别。CRNN的主要贡献在于提出了一个网络架构,这种架构具有以下…

基于飞腾平台的Kafka移植与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

java基础 之 集合与栈的使用(一)

文章目录 集合特点(从整体性来看)区别List接口(一)实现类:ArrayList(二)实现类:LinkedList 集合 java集合可分为Set、List、Queue和Map四种体系。其中List、Set、Queue均继承自Coll…

ADC静态误差

0 前言 图1 表示测量数据精密度高,但准确度较差;图2 表示测量数据的准确度高,但精密度差;图3 表示测量数据精密度和准确度都好,即精确度高。 1 简介 模数转换器(ADC)广泛用于各种应用中&…

Spring Cloud开发实战(一)- 搭建一个Eureka+Feign+LoadBalancer 项目

Spring Cloud开发实战(一)- 搭建一个EurekaFeignLoadBalancer 项目 文章目录 Spring Cloud开发实战(一)- 搭建一个EurekaFeignLoadBalancer 项目0.内容简介1.Eureka服务注册与发现1.1.什么是服务注册与发现1.2.Eureka注册中心1.2.…

Android 系统与SDK和JDK版本对照表

Android 系统与SDK和JDK版本对照表 传说中的兼容问题是指在高版本 SDK 平台开发的软件,可能在低版本 Android 系统中运行时出现各种问题。而低版本 SDK 开发的软件在高版本 Android 系统中运行时基本没有兼容问题的。 Android版本SDK/API版本JDK版本备注Android 14…

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…