【Cortex-M3权威指南】学习笔记2 - 指令集
目录
- 指令集
- 汇编语言基础
- UAL
- 近距离检视指令
- 数据传输
- 数据处理
- 子程呼叫与无条件跳转指令
- 标志位与条件转移
- 指令隔离指令
- 饱和运算
- CM3 中新引入指令
- MRS\MSR
- IF-THEN
- CBZ/CBNZ
- SDIV/UDIV
- REV RBIT
- SXTB
- TBB,TBH
指令集
汇编语言基础
一条简单的汇编指令格式(注释使用一个分号):
操作码 操作数 1, 操作数 2, … ;注释
下面表示寄存器移位存储方法,对于立即数必须要以#开头
MOV R0, #0x12 ; R0 -> 0x12
MOV R1, #’A’ ; R1 -> 字母 A 的 ASCII 码
EQU 指示字来定义常数
DCI 编译器指示字,用来表示某些汇编器无法识别的特殊指令助记符
DCB 来定义一串字节常数
DCD 来定义一串 32 位整数
DCI 0xBE00 ; 用于指代断点BKPTDCD 0x123 ; 定义整数DCB "heloworld",0 ; 定义字符串
UAL
统一汇编语言(UAL),是一个语法规则,用于支持 Thumb-2
你依然可以使用传统的 thumb 语法,这里不做介绍
ADD R0, R0, R1 ;等效R0=RO+R1ANDS R0, R0, R1ADDS.N R0, #1 ;指定使用 16 位指令(N=Narrow)
ADDS.W R0, #1 ;指定使用 32 位指令(W=Wide)
近距离检视指令
数据传输
CM3 中的数据传送类型有如下几个
- 在两个寄存器间传送数据
- 在寄存器与存储器间传送数据
- 在寄存器与特殊功能寄存器间传送数据
- 把一个立即数加载到寄存器
常用存储器访问指令
(LDR 加载指令,STR 存储指令)
LDRB Rd, [Rn, #offset]
从地址 Rn+offset 处读取一个字节送到 Rd
LDRD Rd1, Rd2, [Rn, #offset]
从地址 Rn+offset 处读取一个双字(64 位整数)送到 Rd1(低 32 位)和 Rd2(高 32 位)中
STR Rd, [Rn, #offset]
把 Rd 中的低字存储到地址 Rn+offset 处
常用的多重存储器访问方式
感叹号的作用是:
STMIA.W R8!, {r0-R3} ; R8 值变为 0x8010,每存一次增一次,先存储后自增
)。增/减单位:字(4 字节)。例如,记R8=0x8000,则下面两
条指令:
STMDB.W R8, {R0-R3} ; R8 值的“一个内部复本”先自减后再存储数据,但 R8 的值不变```
带预索引的 LDR 和 STR
LDR.W R0, [R1, #20]!
该指令先把地址 R1+offset 处的值加载到 R0,然后,R1 <- R1+ 20
后索引:在后索引中,基址寄存器是无条件被更新,省略感叹号
STR.W R0 [R1], #-12
该指令是把 R0 的值存储到地址 R1 处的。在存储完毕后, R1 <- R1+(-12)
注:利用 LDR 和 STR 时,可以使用寄存器作为偏移值,而不用背立即数
但如果拿寄存器作偏移值就绝对不可以使用预索引和后索引了
LDR 伪指令和 ADR 伪指令
LDR r0, =address1
:将地址 address1 的立即数加载到寄存器 r0 中。
ADR r0, address1
:将标签 address1 的地址加载到寄存器 r0 中
数据处理
ADD 指令有如下几个用法
ADD R0, R1
; R0 += R1ADD R0, #0x12
; R0 += 12ADD.W R0, R1, R2
; R0 = R1+R2
除了 ADD 指令之外,CM3 中还包含 SUB, MUL, UDIV/SDIV
等用于算术四则运算
SUB Rd, Rm
常规减法,Rd -= Rn
SBC Rd, Rm
带错位的减法,Rd -= Rm+C
RSB.W Rd, Rn, #imm12
反向减法,Rd = imm12-Rn
MUL Rd, Rm
常规乘法,Rd *= Rm
常规逻辑操作
移位以及循环指令
LSL Rd, Rn, #imm5 ; Rd = Rn<<imm5
逻辑左移
LSR Rd, Rn, #imm5 ; Rd = Rn>>imm5
逻辑右移
ASR Rd, Rn, #imm5 ; Rd = Rn>>imm5
算数右移
其余指令出现频率很低,面试不会细分考察,我们仅需掌握重点简单的内容就好了,别为难自己
子程呼叫与无条件跳转指令
最基础的两个无条件跳转指令:
B Label
跳转到 Label 处对应的地址BX reg
跳转到由寄存器 reg 给出的地址BL Label
跳转到 Label 对应的地址,并且把跳转前的下条指令地址保存到 LRBLX reg
跳转到由寄存器 reg 给出的地址,并根据 REG 的 LSB 切换处理器状态,还要把转移前的下条指令地址保存到 LR
在执行 BLX 时,必须置位 LSB=1,否则触发 fault
标志位与条件转移
应用程序状态寄存器(APSR)中存在 5 个标志位
标志位用于表示程序执行过程中的状态信息和操作结果的特性
以下为 APSR 中的四个可被条件转移指令参考的标志位
- N(Negative):表示最近的算术或逻辑操作结果为负数。它用于判断操作结果的符号。
- Z(Zero):表示最近的算术或逻辑操作结果为零。它用于检测操作结果是否为零。
- C(Carry):表示最近的无符号算术操作产生了进位或借位。它用于处理多字节算术运算中的进位或借位。
- V(Overflow):表示最近的有符号算术操作产生了溢出。它用于检测有符号数运算的溢出情况。
下表展示了各种可供我们使用的跳转条件,当对应标志位置位后进入跳转流程
以上条件组合常配合无条件转移指令(B)使用,使之变成各式条件转移指令
BEQ label
表示当 z 被置位为 1 时跳转到位置 label
MOVGT R2, R1
条件跳转例子:
CMP
表示为两个数作差,并根据差的结果设置标志位- 根据上方四个标志位,可知当算数运算结果等于 0 时,触发
z=1
- 故当
R0==R1==0
时,触发z=1
,此时 BEQ 检测到标志位置位,即进入跳转流程,跳转到 label 标注的位置
CMP R0, R1
BEQ label
指令隔离指令
指令隔离(Instruction Barrier)指令是一种用于确保指令执行顺序和内存访问顺序的特殊指令,一般用于多核处理器和多线程环境
如果 CM3 缺少对应的隔离措施,就会发生所谓的“紊乱现象”
下面为 CM3 中的 3 条隔离指令
- ISB(Instruction Synchronization Barrier):执行 ISB 指令会导致处理器暂停执行,直到之前的所有指令都已完成执行,同时将所有未决的中断和异常处理完毕。这可以确保在 ISB 指令之前的所有指令都已经完成执行,防止指令重排序。
- DSB(Data Synchronization Barrier):执行 DSB 指令会导致处理器暂停执行,直到之前的所有数据访问指令都已经完成。这可以确保在 DSB 指令之前的所有数据访问指令都已经完成,防止数据访问重排序。DSB 指令还可以用于确保处理器与外部设备之间的数据同步。
- DMB(Data Memory Barrier):执行 DMB 指令会导致处理器暂停执行,直到之前的所有数据访问指令和内存访问指令都已经完成。这可以确保在 DMB 指令之前的所有数据和内存访问都已经完成,防止数据和内存访问重排序。DMB 指令还可以用于确保处理器与外部设备之间的数据同步。
饱和运算
饱和运算类似于模电中的削顶失真,即通过使用 SSAT 指令,将大数据(32 位)截断为小数据(16 位)
SSAT.W Rd, #imm5, Rn, {,shift}
Rd
:目标寄存器,用于存储截断后的结果。#imm5
:一个立即数,表示要截断的位数,取值范围为 1 到 32。Rn
:源寄存器,包含要进行截断操作的原始数据。{,shift}
:可选参数,用于指定可选的移位操作,可以是 LSL(逻辑左移)、LSR(逻辑右移)、ASR(算术右移)或 ROR(循环右移)。
CM3 中新引入指令
这些指令从 ARMv6,ARMv7 才开始支持
MRS\MSR
这两条指令仅可以在以下两种情况下使用:
- 特权级
- APSR 下的用户级
命令语法
MRS <Rn>, <SReg>
加载特殊功能寄存器的值到 Rn
MSR <Sreg>,<Rn>
存储 Rn 的值到特殊功能寄存器
IF-THEN
IF-THEN(IT)
指令围起一个块,里面最多有 4 条指令
其中 T 代表条件成立时执行的语句,E 代表条件不成立时执行的语句
E 对应指令必须和 T 对应指令相反!
下面展示了对应伪代码和使用方式
CBZ/CBNZ
CBZ(Compare and Branch if Zero):CBZ 指令用于比较一个寄存器的值是否为零,如果为零,则执行跳转操作到指定的目标地址。
CBNZ 含义与 CBZ 相反
格式:
CBZ <寄存器>, <目标地址> ; 如果寄存器的值为零,则跳转到目标地址
CBNZ <寄存器>, <目标地址> ; 如果寄存器的值不为零,则跳转到目标地址
SDIV/UDIV
32 位硬件除法指令
SDIV.W Rd, Rn, Rm
UDIV.W Rd, Rn, Rm
REV RBIT
REV 反转 32 位整数中的字节序,REVH 则以半字为单位反转,且只反转低半字
REV Rd, Rm
REVH Rd, Rm
REV16 Rd, Rm
REVSH Rd, Rm
RBIT 比前面的 REV 之流更精细,它是按位反转的,相当于把 32 位整数的二进制表示法水平旋
转 180 度
RBIT.W Rd, Rn
SXTB
用于将数据宽度转换成带符号位 32 位整数长度
带 U 字头的表示高位清零
SXTB Rd, Rn
SXTH Rd, Rn
UXTB Rd, Rn
UXTH Rd, Rn
TBB,TBH
TBB(Table Branch Byte)
:TBB 指令用于通过查找表的方式进行跳转。它将一个字节大小的偏移量添加到基地址寄存器中,并跳转到所得到的目标地址。
TBB [<基地址寄存器> + <偏移量寄存器>]
TBH(Table Branch Halfword)
:相对应处理的就是半字数据
TBH [<基地址寄存器> + <偏移量寄存器> * 2]
相关文章:
【Cortex-M3权威指南】学习笔记2 - 指令集
目录 指令集汇编语言基础UAL 近距离检视指令数据传输数据处理子程呼叫与无条件跳转指令标志位与条件转移指令隔离指令饱和运算 CM3 中新引入指令MRS\MSRIF-THENCBZ/CBNZSDIV/UDIVREV RBITSXTBTBB,TBH 指令集 汇编语言基础 一条简单的汇编指令格式(注释使用一个分号…...
Java——一个Java实体类,表示一个试题的模型
这段代码是一个Java实体类,表示一个试题的模型。 该实体类具有以下属性: id:题号,表示试题的编号。title:题目,表示试题的题目内容。optionA:选项A,表示试题的选项A。optionB&#…...
PHP8函数的引用和取消-PHP8知识详解
今天分享的是php8函数的引用和取消,不过在PHP官方的参考手册中,已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数,都可以直接简单的通过函数名调佣。函数的引用大致有下面3种: 1.1、如果是PHP的内置函…...
华为OD机试真题【最大利润】
1、题目描述 【最大利润】 商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index] 每种商品的价格是item-price[item_index][day] 通过对商品的买进和卖出获取利润 请给出商人在days天内能获取的最大的利润 注:…...
YOLOv5+deepsort实现目标追踪。(附有各种错误解决办法)
一、YOLOv5算法相关配置 🐸这里如果是自己只想跑一跑YOLOV5的话,可以参考本章节。只想跑通YOLOv5+deepsort的看官移步到下一章节。 1.1 yolov5下载 🐸yolov5源码在github下载地址上或者Gitee上面都有。需要注意的是由于yolov5的代码库作者一直在维护,所以下载的时候需…...
java.8 - java -overrideoverload 重写和重载
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不…...
oracle通配符大全
用于where比较条件的有 : 等于:、<、<、>、>、<> >,<:大于,小于 >.<:大于等于,小于等于 :等于 !,<>,^:不等于 包含:in、not in exists、not exists 范围:betwe…...
浏览器开发者工具平台js代码开启展开收起
1、如下js左侧可以展开和收起段落,需要打开右上角的设置 2、Preferences这里勾选Code folding 即可像上面那张图展开和收起js段落代码 3、然后重新打开开发者工具,随意打开一个js文件,这里就有缩放了...
opencv 案例实战01-停车场车牌识别实战
需求分析: 车牌识别技术主要应用领域有停车场收费管理,交通流量控制指标测量,车辆定位,汽车防盗,高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安,防止交通堵塞…...
【PHP】PHP开发教程-PHP开发环境安装
1、PHP简单介绍 PHP(全称:Hypertext Preprocessor)是一种广泛使用的开放源代码脚本语言,特别适用于Web开发。它嵌入在HTML中,通过在HTML文档中添加PHP标记和脚本,可以生成动态的、个性化的Web页面。 PHP最…...
AURIX TriCore内核架构学习笔记
名词缩写 ISA - Instruction Set Architecture,指令集架构PC - Program Counter, holds the address of the instruction that is currently runningGPRs - 32 General Purpose RegistersPSW - Program Status WordPCXI - Previous Context InformationCSA - Conte…...
VMware ESXi 7.0 优化VMFSL磁盘占用与系统存储大小
文章目录 VMware ESXi 7.0 优化VMFSL磁盘占用与系统存储大小引言创建ESXi7.0可启动 U 盘结果检查VMware ESXi 7.0 优化VMFSL磁盘占用与系统存储大小 引言 本文讲述了在 J1900平台上安装ESXi7.0时减少 VMFSL 分区占用的说明, 通常这来说些主机内置的磁盘空间非常小, 采用默认安…...
4.网络设计与redis、memcached、nginx组件(二)
系列文章目录 第四章 网络设计与redis、memcached、nginx组件(一) 第五章 网络设计与redis、memcached、nginx组件(二) 文章目录 系列文章目录[TOC](文章目录) 前言一、reactor模型?二、Reactor 开发1.建立连接 三、典型reactor 模型单reactor 模型典型 readisradi…...
后端开发有哪几种语言? - 易智编译EaseEditing
后端开发是构建应用程序的一部分,负责处理服务器端的逻辑、数据库交互和数据处理。有许多编程语言可用于后端开发,以下是一些常见的后端开发语言: Java: Java是一种广泛使用的面向对象编程语言,具有强大的跨平台能力。…...
Spring 学习源码的基础 核心原理与核心概念
文章目录 核心原理AnnotationConfigApplicationContextIoC 容器加载流程Spring 中如何创建一个对象Bean 的创建过程 (生命周期)单例 原型推断构造方法依赖注入AOP 动态代理判断是否需要 AOP 的大致流程CGLib 做 AOP 的大致流程事务事务代理对象执行方法的流程事务注解排至失效的…...
cpolar做一个内网穿透
因为不在公司,需要访问公司的数据库,所以做一个内网穿透 下载安装 下载地址: https://dashboard.cpolar.com/get-started 下载后是个压缩包,解压后傻瓜式安装 操作隧道 安装后打开Cpolar Web UI 登录账号,查看隧…...
自动驾驶——最优控制算法(LQR)工程化总结
1. Summary 时隔一年,从写下第一篇博文自动驾驶-LQR工程实现(调研),到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”…...
【微服务】05-网关与BFF(Backend For Frontend)
文章目录 1.打造网关1.1 简介1.2 连接模式1.3 打造网关 2.身份认证与授权2.1 身份认证方案2.1.1 JWT是什么2.1.2 启用JwtBearer身份认证2.1.3 配置身份认证2.1.4 JWT注意事项 1.打造网关 1.1 简介 BFF(Backend For Frontend)负责认证授权,服务聚合,目标…...
保证MQ的高可用的几种方案
推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,MJ,GPT,SDXL百科全书 「java、python面试题」…...
MySql013——函数
一、数据处理函数 1.1、文本处理函数 函 数 说 明 Left() 返回串左边的字符Length() 返回串的长度Locate() 找出串的一个子串Lower() 将串转换为小写LTrim() 去掉串左边的空格Right() 返回串右边的字符RTrim() 去掉串右边的空格Soundex() 返回串…...
k8s-dashboard使用指导手册
一、访问 dashboard http://172.66.209.101:32001 二、选择 Namespace 如下图: 1 在①搜索框中输入 spms 2 在②选择 spms-cloud 三、查找 pod 1 打开 pod 列表 2 打开过滤窗口 3 搜索 pod 在打开的搜索框中输入 pod的关键字,支持模糊搜索 如搜索…...
Python爬虫快速入门指南
引言: 网络爬虫是一种自动化程序,可以在互联网上搜集和提取数据。Python作为一种功能强大且易学的编程语言,成为了许多爬虫开发者的首选。本文将为你提供一个关于Python爬虫的快速入门指南,包括基本概念、工具和实际案例。 第一…...
Java人脸识别技术探索与实践
人脸识别技术作为生物特征识别领域的一项重要应用,近年来在安全、便捷以及科研等方面取得了显著的进展。在Java编程领域,人脸识别也得到了广泛的关注和应用。本文将介绍Java中人脸识别技术的基本概念、常用库以及实际示例代码,带您深入了解这…...
【鞋服零售ERP】之要货申请单设计思路
引言 要货申请单在本系统中也是一张较为核心的单据,整体的思路是将其池化,解决收发货方业务简化,账务处理逻辑化的设计理念。首先鞋服零售ERP就是基于多组织的业务架构,多销售组织和店铺属性;其次是在零售如何在业处处…...
EWM怎么取消pinking,SAP_EWM取消拣配报错处理方式
EWM是SAP的一个模块,代表扩展仓库管理(Extended Warehouse Management),是SAP企业资源计划(ERP)的一部分。它提供了一个完整的、高级的仓库管理解决方案,支持企业在全球范围内的仓库管理、订单管…...
TensorFlow 的基本概念和使用场景
TensorFlow 是 Google 开源的机器学习框架,它支持使用数据流图(Data Flow Graph)的方式进行计算,以实现大规模分布式机器学习应用。TensorFlow 在深度学习、自然语言处理、计算机视觉等领域有广泛应用。 TensorFlow 中的重要概念…...
openssl 加密(encrypt)、解密(decrypt)、签名(sign)、验证(verify)
一、使用openssl rsautl 进行加密、解密、签名、验证 [kyzjjyyzc-zjjcs04 openssl]$ openssl rsautl --help Usage: rsautl [options] -in file input file -out file output file -inkey file input key -keyform arg private key format - default PEM …...
视频云存储/安防监控视频AI智能分析网关V3:抽烟/打电话功能详解
人工智能技术已经越来越多地融入到视频监控领域中,近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能,该平台内置多种AI算法,可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍,支持口罩佩戴检…...
新版Jadx 加载dex报错 jadx.plugins.input.dex.DexException:Bad checksum 解决方法
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!新版Jadx(1.6+) 加载dex报错 jadx.plugins.input.dex.DexException:Bad checksum 解决方法 环境 win10J…...
win11+vmware17+centos7.9环境搭建
温故知新 📚第一章 前言📗背景📗目标📗总体方向 📚第二章 安装部署环境📗安装VMware Workstation 17 Pro软件📗安装CentOS-7虚拟机📕镜像下载地址📕创建虚拟机Ǵ…...
温州大型网站设计公司/网址收录
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm完整代码:复制代码代码如下:用html5的canvas画布绘制贝塞尔曲线原文function draw(id){var canvasdocument.getelementbyid(id);if(canvasnull)return false;var contextcanvas.getcontext(2d);cont…...
苹果手机怎么做ppt下载网站/网络营销大赛策划书
jQuery UI 设计主题文件结构主题是以特定的方式来增加他们的易用性。通常,文件目录结构如下所示:themename/ – 您的主题必须完全包含在一个单独的以主题名称命名的文件夹内。themename/themename.css – 这是基本的 CSS 文件。无论使用了哪个插件&#…...
成都公安网站备案/百度推广渠道户
文章目录前言一、安装axios二、调用后台接口三、主页面四、模拟后台接口第一种方法第二种方法第三种方法五、出现的问题总结前言 学习并练习前端调用后台返回的接口数据,通过postman模拟返回后台接口 一、安装axios 先安装: npm install axios然后&am…...
网站是用dreamer做的_为什么后台能进去前台进不去了/祁阳seo
我有一个程序,使用ac#rsa公钥加密密码,输出一个字节数组。为了让我轻松地传输它并维护数据,我将字节直接转换为十六进制字符串。 现在这是我遇到问题的地方。 我将发布数据发送到我的脚本,现在不确定将其转换为什么以及…...
网站建设的7种流程图/semi final
转载于:https://www.cnblogs.com/zhongshujunqia/p/4660853.html...
宿迁企业做网站/地推拉新app推广平台有哪些
1.给class前面加abstract就是抽象类,如下给Animal类添加abstract关键字。2.new Animal的时候会报错,这是在提醒我们new Animal没什么意义。但是Animal two new Cat()是可以的。抽象类:不允许实例化,可以通过向上转型,…...