ARM传输数据以及移位操作

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 是提供移位数据的指令

相关推荐
一木 之林9 小时前
三.C++ 内存管理(进阶)(二)
开发语言·arm开发·c++
hongmai6668881 天前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
隔窗听雨眠3 天前
ARM架构下Logstash与Elasticsearch集群部署完全指南:从环境适配到生产验证
arm开发·elasticsearch·架构
郭老师-嵌入式3 天前
arm linux 移植 udhcp 与 使用
linux·服务器·arm开发
深念Y3 天前
登录日志与管理员审计日志存储决策
前端·arm开发·后端·微服务·云原生·架构
深念Y4 天前
微服务抽取路线图:从胖单体到 ARM 集群
前端·arm开发·数据库·后端·微服务·云原生·架构
亿道电子Emdoor4 天前
【Arm】如何高效实现2兆字节对齐
arm开发·单片机·mcu
姓刘的哦4 天前
STM32的启动流分析
linux·运维·arm开发
zlinear数据采集卡5 天前
FRAM铁电存储器原理深度解析:D223校准参数的“永久保险箱“
arm开发·人工智能·stm32·单片机·fpga开发·开源
喜欢吃燃面5 天前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发