前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >嵌入式:ARM指令集分类及编码

嵌入式:ARM指令集分类及编码

作者头像
timerring
发布于 2022-12-16 07:54:22
发布于 2022-12-16 07:54:22
2.1K0
举报
文章被收录于专栏:TechBlogTechBlog

ARM指令集是32位的,程序的启动都是从ARM指令集开始。主要是以下三个方面:

  • 指令分类及指令格式
  • 条件执行
  • 指令集编码

指令分类及指令格式

ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉} < > 是必须项 , {}是可选项

指令格式中符号说明:

opcode操作码;指令助记符,如ADD、STR等。 cond 可选的条件码;执行条件,如EQ、NE等。 S 可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。 Rd 目标寄存器。 Rn 存放第1操作数的寄存器。 op2 第2个操作数。

立即数操作

在数据处理指令中,第二操作数除了可以是寄存器,还可以是一个立即数。如果我们只是希望把一个常数加到寄存器,而不是两个寄存器相加,我们可以用立即数值取代第二操作数,如下面例子。立即数用前面加一个“#”的数值常量来表示。 ADD R3, r3,#1 ;r3 := r3 + 1 AND R8, r7,#& ff ;r8 := r7[7:0]

寄存器移位操作

在ARM数据处理指令中,第二操作数还有一种特有的形式-寄存器移位操作,即允许第二个寄存器操作数在同第一操作数运算之前完成移位操作,例如: ADD r3, r2,r1,LSL #3 ;r3:=r2 + 8 × r1

设置条件码

ARM的任何数据处理指令都能通过增加“S”操作码来设置条件码(N,Z,C和V) 数据处理指令加了“S”后,算术操作(在此包含CMP和CMN)根据算术运算的结果设置所有的标志位

CPSR和SPSR的格式

条件域表1
条件域表2

条件执行

所有的ARM指令集都可以是有条件执行的。 ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。 在ARM的指令编码表中,统一占用编码的最高四位[31:28]来表示“条件码”(即“cond”)。

条件转移

转移

解释

一般应用

B BAL

无条件的 总是

总是执行转移 总是执行转移

BEQ

相等

比较的结果为相等或零

BNE

不等

比较的结果为不等或非零

BPL

结果为正数或零

BMI BCC

负 无进位

结果为负数 算术操作未得到进位

BLO

低于

无符号数比较,结果为低于

BCS BHS

有进位 高于或相等

算术操作得到了进位 无符号数比较,结果为高于或相等

BVC

无溢出

有符号整数操作,未出现溢出

BVS

有溢出

有符号整数操作,出现溢出

BGT

大于

有符号整数比较,结果为大于

BGE

大于或相等

有符号整数比较,结果为大于或相等

BLT

小于

有符号整数比较,结果为小于

BLE

小于或相等

有符号整数比较,结果为小于或相等

BHI

高于

无符号数比较,结果为高于

BLS

低于或相等

无符号数比较,结果为低于或相等

ARM指令集编码

ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应 。编码表如下:

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
用 Shader 写个完美的波浪~
根据我多年喝奶茶的经验,像这种效果用 Shader 做就再简单不过了,最终的效果如下:
陈皮皮
2020/09/10
1.9K0
开源 2D 实时水面反射效果,源码详解!
引言:插件 Easy NavMesh、BenchMark 性能检测的作者孙二喵,从开发者王师傅的论坛分享中获得启发,实现了 2D 实时水面反射效果,Demo 免费开源。
张晓衡
2023/02/23
7200
开源 2D 实时水面反射效果,源码详解!
别人用 Shader 画了个圆,你却只能画椭圆?
由于主流的 Shader 编程网站,如 ShaderToy, gl-transitions 都是基于 GLSL 开发 Shader ,加上 MSL 和 GLSL 语法上差别不大,后面系列文章将以 GLSL 为主来介绍 Shader 编程。
字节流动
2023/09/04
8430
追光效果
追光效果是在舞台全场黑暗的情况下用光柱来突出角色或其他特殊物体,还可以通过操控光源来跟随人物移动。追光效果主要用来突出角色主体以及主体和环境的关系,在游戏中可以用来营造沉浸式氛围以及聚焦玩家视线焦点
异名
2020/06/09
8080
水波扩散效果(shader)
水波扩散是一个比较好看的交互效果,特别是在某些以水为故事发生场景的游戏中,扩散的水波会让场景更加栩栩如生
异名
2020/06/09
2.5K0
融球效果(shader)
元球也叫融球,它能够让两个球体产生“黏糊糊”的效果,是流体、融合等效果的实现基础,异名这次实现的demo是一个固定的大圆,然后手指控制一个游离态的小圆,它们靠近的时候会产生融合的效果
异名
2020/06/09
1.5K0
渐变过渡的相册(shader)
相册是一个大家比较熟悉的场景,一般我们是实现的都是那种跑马灯式的轮播相册,这里异名给大家提供一个利用shader实现图片渐变过渡的相册思路
异名
2020/06/09
4620
OpenGL ES 图像基本处理:腐蚀、膨胀、边缘检测
图像腐蚀(Image Erosion):用于缩小或消除图像中物体的边界。主要用于去除图像中的小细节、噪声或不规则物体。
字节流动
2024/01/18
7880
OpenGL ES 图像基本处理:腐蚀、膨胀、边缘检测
shader 溶解效果
物体的淡入淡出是游戏当中很常见的一种状态切换效果,但是有时候我们希望fade切换的时候,物体能够能更有色彩层次感或者其他一些特殊的中间状态,这个时候就得自己去写着色器,这种区别于单纯的淡入和淡出的效果可以形象地叫做溶解。
异名
2020/06/09
1K0
cocos creator探照灯效果实现
探照灯效果就是指整个场景或者图片都是黑的,只有灯光照射的地方才是亮的。实现方式有很多种,我们这里用shader来实现,主要原因就是用shader来实现,效率更高,效果更好,并且拓展性更强一些。下面是一个探照灯效果:
用户1428723
2020/08/06
1.2K0
cocos creator探照灯效果实现
随便聊聊水面效果的2D实现(一)
  一直想随便写写自己关于水面效果2D实现的一些了解,可惜各种原因一直拖沓,幸而近来有些事情终算告一段落,自己也有了一些闲暇时间,于是便有了这篇东西 :)
用户2615200
2018/08/02
1.6K0
随便聊聊水面效果的2D实现(一)
马赛克效果(shader)
马赛克是一种常用的图像处理手段,因为这种模糊效果看上去有一个个的小格子组,便形象的称这种画面为马赛克。当画面上的马赛克格子小到一定程度的时候,画面呈现出来的风格也叫像素风
异名
2020/06/08
2.1K0
4个方面入手 TiledMap 地图优化!W字干货分享
引言:如何进行 TiledMap 地图优化?开发者 Bool Chen 将分享一套行之有效的 TiledMap 地图优化方案,其中包括了渲染、解析、寻路方面。
张晓衡
2023/02/23
3K0
4个方面入手 TiledMap 地图优化!W字干货分享
阅后即焚的燃尽图实现
我最开始是在一本书上掠过燃尽效果,当时就是觉得很有意思。但是最近才真正动手去实践它。我知道这个效果要用噪声实现,但是实际做的时候才发现不知道如何应用。于是,去shadertoy上搜索了一番。选取了三个例子,有了一点心得。
winty
2024/01/03
3320
阅后即焚的燃尽图实现
圆形头像(shader)
可以使用一张圆的图片,然后配合mask的反向遮罩来实现,但是这种实现的效果会有锯齿,所以一般会写一个shader。异名上篇文章中追光效果中那个shader刚好直接就可以使用了,这系列的定位是常用功能集锦,圆形头像又是高频应用,因此异名就再单独拿出来再水一篇,方面后面查看使用。
异名
2020/06/09
2.2K0
高斯模糊 Shader
高斯模糊(Gaussian Blur),也叫高斯平滑,是一种生活中比较常见的图像处理效果。
陈皮皮
2020/07/10
2.2K0
高斯模糊 Shader
NDK OpenGL ES 3.0 开发(十九):相机抖音滤镜
最近几篇文章主要是利用 OpenGL 实现相机预览的一些常见的滤镜,上一篇主要介绍了 LUT 滤镜的原理及简单实现方法 。
字节流动
2020/06/03
9450
Cocos Creator 2.x透明渐变效果实现
之前写了个透明过渡动画实现是基于Cocos Creator 1.x的,鉴于现在大多数开发者都使用2.x了,并且2.x与1.x中shader的使用方式有很大的不同,这里就把这个效果移植到2.x中。(cocos creator 1.x透明渐变效果实现)
用户1428723
2020/08/06
2.4K0
我用 OpenGL 实现了那些年流行的相机滤镜
上文中我们通过 ImageReader 获取到 Camera2 预览的 YUV 数据,然后利用 OpenGLES 渲染实现相机预览,这一节将利用 GLSL (OpenGL 着色器语言)基于不同的着色器实现多种基础滤镜。
字节流动
2020/08/20
1K0
我用 OpenGL 实现了那些年流行的相机滤镜
Three.js系列: 在元宇宙看电影,享受 VR 视觉盛宴
本文 gihtub 地址: https://github.com/hua1995116/Fly-Three.js
秋风的笔记
2022/12/05
3.2K0
Three.js系列: 在元宇宙看电影,享受 VR 视觉盛宴
相关推荐
用 Shader 写个完美的波浪~
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档