ARM指令格式和寻址方式

CocosCreator视频播放黑屏?手把手教你封装VideoPlayer组件解决Web环境问题 本文针对Cocos Creator在Web环境下视频播放黑屏等常见问题,提供了一套工程化的VideoPlayer组件封装解决方案。文章深入剖析了浏览器自动播放策略、DOM样式隔离等核心挑战,并手把手教你实现一个健壮的管理器,涵盖兼容性处理、性能优化与内存管理,确保视频播放稳定流畅。 阅读详情

原文:http://www.eefocus.com/article/08-08/49786s.html

ARM指令的编码格式
实际指令语法格式为:
ADDEQS R0,R1,R2;
该指令的编码格式为:

ARM指令的助记符
ARM指令在汇编程序中用助记符表示,一般ARM指令的助记符格式为:
<opcode>{<cond>} {S} <Rd>,<Rn>,<op2>
其中:
<opcode> 操作码,如ADD表示算术加操作指令;
{<cond>} 决定指令执行的条件域;
{S} 决定指令执行是否影响CPSR寄存器的值;
<Rd> 目的寄存器;
<Rn> 第一个操作数,为寄存器;
<op2> 第二个操作数。
例如,指令 ADDEQS R1,R2,#5

条件域<cond>
几乎所有的ARM指令都可以根据当前程序状态寄存器CPSR中标志位的值,有条件地执行。
ARM指令的条件域<cond>有16种类型。

ARM指令中的第二操作数
灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:
#immed_8r——常数表达式;
Rm——寄存器方式;
Rm,shift——寄存器移位方式

ARM指令中的第二操作数
如果一个32位立即数直接用在32位指令编码中,就有可能完全占据32位指令编码空间。因此,ARM指令的32位立即数是通过循环右移偶数位得到的。
立即数是由一个8位的常数循环右移位偶数位得到的。
<immediate>=immed_8循环右移(2×rotate_imm)
例如:下面的代码段:
MOV R0, #0x0000F200
MOV R1, #0x00110000
MOV R4, #0x00012800
上面的指令经过汇编之后得到的二进制编码为:
8000:E3A00CF2 (0xF200是由0xF2循环右移24位得到的)
8004:E3A01811(0x110000是由0x11循环右移16位得到的)
8008: E3A04B4A(0x12800是由0下4A循环右移24位得到的)
非法的立即数:0x1010,0x00102,0xFF1000

寻址方式
9种:
立即数寻址
寄存器寻址
寄存器移位寻址
寄存器间接寻址
基址变址寻址
相对寻址
多寄存器寻址
块拷贝寻址
堆栈寻址

立即数寻址
在立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。
#后接0x或&表示十六进制数,0b表示二进制数,0d或缺省表示十进制数。
例:
ADD R0,R1,#5; R0=R1+5
MOV R0,#0x55; R0=0x55
其中:操作数5,0x55就是立即数,立即数在指令中要以“#”为前缀,后面跟实际数值。

寄存器寻址
在寄存器寻址方式下,寄存器的值即为操作数。ARM指令普遍采用此种寻址方式。
例:
ADD R0,R1,R2 ; R0=R1+R2
MOV R0,R1 ; R0=R1

寄存器移位寻址
寄存器移位寻址的操作数由寄存器的数值做相应移位而得到。
移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。
例:
ADD R0,R1,R2,ROR #5
;R0=R1+R2循环右移5位
MOV R0,R1,LSL R3
;R0=R1逻辑左移R3位
移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。

ARM指令集的5种位移操作
LSL逻辑左移 :Rx,LSL <op1>

LSR逻辑右移 : Rx,LSR <op1>

ASR算术右移 :Rx,ASR <op1>

ROR循环右移 :Rx,ROR <op1>

RRX带扩展的循环右移:Rx,RRX

寄存器间接寻址
寄存器中的值为操作数的物理地址,而实际的操作数存放在存储器中。
例:
STR R0,[R1] ; [R1]=R0
LDR R0,[R1] ; R0=[R1]

基址变址寻址
将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。
例:
LDR R0,[R1,#5] ; R0=[R1+5]
LDR R0,[R1,R2] ; R0=[R1+R2]
相对寻址
相对寻址同基址变址寻址相似,区别只是将程序计数器PC作为基址寄存器,指令中的标记作为地址偏移量。
例:
BEQ process1
……
process1
……

多寄存器寻址
在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。
连续的寄存器间用“-”连接,否则用“,”分隔。
例:
LDMIA R0,{R1-R5}
;R1=[R0],R2=[R0+4],R3=[R0+8]
;R4=[R0+12],R5=[R0+16]
指令中IA表示在执行完一次Load操作后,R0自增4。该指令将以R0为起始地址的5个字数据分别装入R1,R2,R3,R4,R5中。

多寄存器寻址
多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:


块拷贝寻址
块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。
例:
LDMIA R0,{R1-R5};
STMIA R1,{R1-R5};
第一条指令从以R0的值为起始地址的存储单元中取出5个字的数据,第二条指令将取出的数据存入以R1的值为起始地址的存储单元中。
实际上是多寄存器寻址的组合。

堆栈寻址
堆栈寻址用于数据栈与寄存器组之间批量数据传输。
当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。
例:
STMFD R13!,{R0,R1,R2,R3,R4};
LDMFD R13!,{R0,R1,R2,R3,R4}
第一条指令,将R0-R4中的数据压入堆栈,R13为堆栈指针;
第二条指令,将数据出栈,恢复R0-R4原先的值。
存储器堆栈可分为两种:
向上生长:向高地址方向生长,称为递增堆栈
向下生长:向低地址方向生长,称为递减堆栈


DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复 本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。 阅读详情

相关推荐

VirtualLab初学者教程-1.用户界面

目录前言一、VirtualLab Fusion简介1.软件2.内置工具箱:二、用户界面认识1.上方菜单栏2.右侧面主窗口3.底部窗口附 前言 感觉做VirtualLab的资料不是特别多,可能用的朋友也比较少吧,笔者最近也因为大创需要刚刚开始入门,把网上有的英文资料整理了一下,加了一点自己的内容发出来希望帮助更多在学习中的朋友,有用词不当之处还请多多包涵。 一、VirtualLab Fusion简介 因为是第一讲,简单啰嗦一下软件本身,参考官方介绍。 1.软件 VirtualLab是由德国LightTran

ClaireTang1的博客 2万+

汇编指令(ARM体系机构)

常用汇编指令 1、ARM状态下的通用寄存器和程序计数器 (1)ARM状态下各工作模式使用的寄存器 (2)当前程序状态寄存器(CPSR) N:结果是否为负数 Z:运算结果是否为0 C:进位/借位/移位溢出 V:溢出标志(Overflow) I:中断禁止位 F:快中断禁止位 T:CPU状态位;置位时,CPU处于Thumb状态;否则处于ARM状态。 M4~M0:工作

liyuqian199695的博客 896

STM32+EC800M-CN 4G模块数据透传踩坑实录:从AT指令调试到花生壳内网穿透

本文详细介绍了STM32与移远EC800M-CN 4G模块的数据透传实现过程,包括硬件连接、AT指令调试、TCP连接建立以及花生壳内网穿透配置。通过实战案例和代码示例,帮助开发者快速解决4G通信模块在物联网应用中的常见问题,提升数据传输稳定性。

weixin_42715608的博客 320

S3C2440 汇编指令

arm汇编指令集 算术和逻辑指令 adc : 带进位的加法 (addition with carry) adc{条件}{s}  , ,                  dest = op_1 + op_2 + carryadc 将把两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的加法。下列例子将加两个 128 位的数。 12

cjnewstar111的专栏 2212

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6390

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 398

ARM指令寻址方式

    资料来源于   ARM应用系统开发详解──基于S3C4510B的系统设计1. ARM指令及功能描述助记符 指令功能描述ADC 带进位加法指令ADD 加法指令AND 逻辑与指令B 跳转指令BIC 位清零指令BL 带返回的跳转指令BLX 带返回和状态切换的跳转指令BX 带状态切换的跳转指令CDP 协处理器数据操作指令CMN 比较反值指令CMP 比较指令EOR 异或指令LDC 存

kv110的专栏 4259

U-Boot 适配新型号 SPI Nor Flash 实战解析

本文详细解析了U-Boot适配新型号SPI Nor Flash的全过程,从JEDEC ID识别错误入手,深入源码分析Flash信息数据库,结合实际手册参数添加新设备支持。重点介绍了设备树同步和验证调试的关键步骤,并总结了常见问题与解决方案,为嵌入式开发者提供实用参考。

weixin_29170327的博客 199

ARM处理器汇编

ARM寻址方式: 1、 立即寻址,操作数在指令中给出。 ADDR0,R0,#1;    R0ßR0+1 ANDR8,R7,#&FF; R8ßR7[7:0]; ADDR0,R0,#&3F R0ßR0+0X3F        立即数要求加上#作为前缀,十六进制使用0x,或者

宇文的专栏 4190

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1918

2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷1:文末附答案

2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷1:文末附答案

王老师青少年编程 1178

ARM指令格式

CPSR (Current Program Status Register)特殊的寄存器,用于存储当前的程序状态信息。

cc486gank的博客 2012

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1428

arm指令编码格式和语法格式及其寻址方式

http://blog.youkuaiyun.com/starshinning975/article/details/48580925 arm指令一般编码格式和一般语法格式 1、编码格式:    2、语法格式:    3、解释:  3.1、 3.2、opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器;Rn:第1个操作数的寄存器;opera

chungle2011的专栏 8617

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ARM汇编指令1 - 指令格式和寻址方式

ARM汇编指令

to_be_better_wen的博客 1798

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第二天-ARM汇编(物联技术666)

写的一手好笔记。

1127

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

arm指令一般编码格式和一般语法格式

https://blog.youkuaiyun.com/carlyll/article/details/49209651 参考文章一: arm指令一般编码格式和一般语法格式 1、编码格式: 2、语法格式: 3、解释: 3.1、<>内的项是必须的,{}内的项是可选的 3.2、opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器;Rn:第1个操作数的寄存器;operand2:第2个操作数; 3.3、大多数时候可以根据CPSR的条件标志位觉得是否该执行指令。当.

happylzs2008的专栏 4928

第3章 ARM指令集寻址方式—ARM指令的编码格式

ARM指令寻址方式可分为四大类:数据处理指令寻址、Load/Store指令的寻址、批量Load/Store指令的寻址和协处理指令寻址。 一、ARM指令的编码格式 1、一般编码格式 每条ARM指令占有4个字节,其指令长度为32位。典型的ARM指令编码格式如下。 其中: 1)cond(bit[31:28]):指令执行的条件码。 2)type(bit[27:26]):指令类型码,根据其编...

xiezhi123456的博客 1600

第2章 ARM指令分类及其寻址方式

2.1 ARM指令集概要介绍 ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理器指令和异常中断产生指令6类: ARM指令字长为固定的32位。一条典型的ARM指令编码格式如下: opcode 指令操作符编码。 cond 指令执行的条件编码。 S 决定指令的操作是否影响CPSR的值。 Rd 目标寄存器编码。 Rn...

diangai5591的博客 357

ARM指令集之Load/Store指令寻址方式(一)

文章目录语法格式寻址方式立即数偏移量寻址寄存器偏移量寻址寄存器移位偏移量寻址 这篇笔记记录的是操作32位子类型和无符号字节数据的Load/Store指令所使用的寻址方式。 所有类型的Load/Store指令的寻址方式都是由基址加偏移量组成的,基址用任意的通用寄存器指定,偏移量的指定方式有如下三种: 立即数; 寄存器; 寄存器和一个移位常数; 寻址方式的计算又有如下三种方式: 偏移量方法; 事先更新方法; 事后更新方法;. 注意:上述内容适用于所有类型的Load/Store指令。 语法格式 操作32位

九天小哥的专栏 2912

ARM (二) arm指令分类及其寻址方式

ARM 一. ARM指令长度及数据类型 ARM微处理器的指令长度可以是32位(ARM状态下), 也可以是16位(在Thumb状态下) ARM微处理器中支持字节(8位),半字(16位),字(32位)三种数据类型,字需要4字节对齐(地址低两位为0),半字需要2字节对齐(地址的最低位为0) 程序的启动都是从ARM指令集开始, 所有的ARM指令集都可以是有条件执行的. 二. ARM汇编指

smile_benson 759

Android逆向中常用的ARM汇编指令基础知识

一  ARM寄存器 1.通用寄存器 1).未分组寄存器:R0~R7 2).分组寄存器:R8~812 R13:SP,常用作堆栈指针,始终指向堆栈的顶部,当一个数据(32位)推入堆栈时,SP(R13的值减4)向下浮动指向下一个地址,即新的栈顶,当数据从堆栈中弹出时,SP(R13的值加4)向上浮动指向新的栈顶。 R14:连接寄存器(LR),当执行BL子程序调用指令时,R14中得

WeiFengZhiMo的博客 4004

基于ARM9的寻址方式

啥是寻址:处理器指令系统中规定的寻址操作数所在地址的方式;或者说通过什么样的方式找到操作数; 指令和指令格式 ARM指令格式: {} {S} , {,第二个操作数} {}:代表可以省略; {}:指令的执行条件;若没有条件,表示默认AL(无条件执行); 栗子: ADDEQS R0,R1,#8 ADDEQS是操作操作码; EQ是指令执行的条件域,EQ表示相等时执行; S

small_is_powerful , small_is_beautiful 1606

计算机原理与应用第三章——ARM指令系统

第三章 ARM指令系统 文章目录第三章 ARM指令系统ARM指令系统简介体系架构与指令系统指令格式ARM指令的寻址方式ARM核心指令 ARM指令系统简介 可以让计算机执行某种操作的命令,称为机器指令。计算机的指令系统是只改计算机的CPU所能识别和执行的全部指令的集合。 体系架构与指令系统 读懂上图: ARM7TDMI(即第二列的CPU),是基于ARMV4T1架构的,其中V4表示ARM指令集版本4(32位),T1表示Thumb指令集版本1(16位),简称Thumb-1。 ARM指令集与Thumb指令

南瑾与春风的博客 1807

ARM基础系列——ARM指令集

ARM指令和指令系统: 指令是指示计算机某种操作的命令,指令的集合称为指令系统。指令系统的功能强弱很大程度上决定了这类计算机智能的高低,它集中地反应了微处理器的硬件功能和属性。 ARM指令在机器中的表示格式是用32位的二进制数表示。如ARM中有一条指令为 ADDEQS  R0,R1,#8; 其二进制代码形式为: 31~28 | 27~25 | 24~21 | 2

destiny_my的专栏 4328

嵌入式linux寄存器移位寻址,嵌入式Linux ARM汇编(三)——ARM汇编指令(一)

嵌入式Linux ARM汇编(三)——ARM汇编指令一、ARM汇编语言基本结构AREA Init, CODE,READONLYENTRYStartLDR R0, =0x3FF5000LDR R1, 0xFFSTR R1, [R0]LDR R0, =0x3FF5008LDR R1, 0x01STR R1, [R0]... ... ... ... ... ...END二、ARM处理器寻址方式寻址方式是...

weixin_30704909的博客 1131
上一篇: ARM编程模型
下一篇: ARM指令集
小文兄弟
博客等级 码龄17年 28粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值