ARM传输数据以及移位操作

news/2024/11/7 14:41:31/

3.2.2 数据传送指令

    LDR/STR指令用来在寄存器和内存之间输送数据。如果我们想要在寄存器之间传送数据,则可以使用MOV指令。MOV指令的格式如下。

MOV {cond} {s}Rd, oprand2

MOV {cond} {s}Rd, oprand2

 其中,{cond}为条件指令可选项,{s}用来表示是否影响CPSR寄存器的纸,如MOVS指令就会影响寄存器CPSR的值,而MOV则不会,MVN指令用来将操作数operand2 按位取反后传送到目标寄存器Rd, 操作数operand2 可以是一个立即数,也可以是一个寄存器。

MOV和MVN指令的一般使用方法如下。

MOV R1, #1

MOV R1, R0

MOV PC, LR

MVN R0, #0xff

MVN R0, R1

 算术运算指令包括基本的加减乘除,逻辑运算指令包括与或非异或消除等,指令格式如下。

AOD {cond} {S} Rd, Rn operand2, 

ADC {cond} {S}Rd, Rn, operand2

SUB {cond} {S}Rd, Rn, operand2

AND {cond} {S}Rd, Rn, operand2

ORR {cond} {S}Rd,Rn, operand2

EOR  {cond} {S}Rd,Rn, operand2

BIC  {cond} {S}Rd,Rn, operand2

算数逻辑运算指令的基本使用方法以及说明如下

ADD R2,R1, #1

ADC R1,R1,#1

SUB R1, R1, R2

SBC R1, R1, R2

AND R0, R0, #3

ORR R0, R0, #3

EOR R0, R0, #3

BIC R0, R0, #3

3.2.4 操作数,operand2详解

   ARM指令的可选项很多,操作数也很灵活,很多ARM指令会使用第二个参数operand2, 可以是一个常数,也可以是寄存器 + 偏移的形式,操作数operand2 在汇编程序中经常出现的两种格式如下。

#contant

   第一种格式比较简单,操作室是一个立即数,第二种格式可以直接使用寄存器的值作为操作数。在3.2.3 节中的ADD, SUB, AND指令示例种,第二个操作数要么是一个常数,那么是一个寄存器,在第二种格式中, 通过{shift}可选性,我们还可以通过多种移位或者循环移位的方式。构建更加灵活的操作数,可以选择的移位方式如下。

#constant 将立即数constant 循环右移n位

ASR 算数右移n位,n的取值范围

LSL 逻辑左移n位,n的取值范围{1,32}

ROR 向右循环移动n位,n取值范围{1,31}

RRX 向右循环移动1位 带扩展

type Rs 仅仅在ARM中可用,,其中type指ASP, LSL, LSR, RCR, Rs 是提供移位数据的指令


http://www.ppmy.cn/news/1195658.html

相关文章

C++适配器

文章目录 引言栈和队列 priority_queue仿函数迭代器区间 引言 栈的特性是先进后出,队列的特性是先进先出,然而双向队列同时具有栈和队列的特性,所以我们可以通过双向队列来适配出栈和队列。 先看库里面 栈和队列 stack和queue模板参数里面都…

云安全-云原生k8s攻击点(8080,6443,10250未授权攻击点)

0x00 k8s简介 k8s(Kubernetes) 是容器管理平台,用来管理容器化的应用,提供快速的容器调度、弹性伸缩等诸多功能,可以理解为容器云,不涉及到业务层面的开发。只要你的应用可以实现容器化,就可以部…

el-select直接显示code不显示text的问题

设置的code值为integer,option的code值为string,所以选不中

python如何使用gspread读取google在线excel数据?

一、背景 公司使用google在线excel管理测试用例,为了方便把手工测试用到的测试数据用来做自动化用例测试数据,所以就想使用python读取在线excel数据,通过数据驱动方式,完成自动化回归测试,提升手动复制,粘…

[100天算法】-数组中的第 K 个最大元素(day 54)

题目描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k 2 输出: 5 示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k 4 输出: 4 说明:你可以假设 k 总…

thinkphp6 入门(11)-- 模板标签

新版框架默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-template依赖库)。 composer require topthink/think-view配置文件 安装完成后,在配置目录的vi…

[ubuntu]查看自己电脑硬件是否支持avx指令集

有时候paddlepaddle或者其他深度学习框架明显需要avx支持才能正常使用,因此知道电脑硬件是否支持avx很重要,那么怎么查看自己电脑是否支持avx指令集呢,很简单输入下面命令即可 grep -o -e sse4_2 -e avx -e sse4a -e avx2 /proc/cpuinfo

CC++动态内存分配与释放

C&C中内存分配分的方式有C语言方式和C方式两种,由于C兼容C,所以C的分配方式是可以 在C中使用。 C分配释放方式 在C中,动态内存分配和释放是通过使用new和delete关键字来完成的。 动态内存分配: 使用new关键字来分配动态内存…