IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM指令集 -> 正文阅读

[嵌入式]ARM指令集

1 、LDR 和 STR

加载/存储字和无符号字节指令,使用单一数据传送指令(STR 和 LDR)来装载和存储,单一字节或字的数据从/到内存LDR指令用于从内存中读取数据放入寄存器中,STR指令用于将寄存器中的数据保存到内存。

指令格式如下:

LDR{cond}{T}   Rd,<地址>				;加载指定地址上的数据(字),放入 Rd 中 

STR{cond}{T}   Rd,<地址>				;存储数据(字)到指定地址的存储单元,要存储的数据在 Rd 中 

LDR{cond}B{T}  Rd,<地址>				;加载字节数据,放入 Rd 中,即 Rd 最低字节有效,高 24 位清零 

STR{cond}B{T}  Rd,<地址>				;存储字节数据,要存储的数据在 Rd,最低字节有效 

2、LDM 和 STM

批量加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数,LDM 为加载多个寄存器,STM 为存储多个寄存器,允许一条指令传送 16 个寄存器任何子集或所有寄存器。LDM /STM 的主要用途是现场保护、数据复制、参数传送等。

指令格式如下:

LDM{cond}<模式>   Rn{!},reglist{^} 
STM{cond}<模式>   Rn{!},reglist{^} 

LDMIA   R0!,{R3-R9}    				;加载 R0 指向的地址上的多字数据,保存到 R3~R9 中,R0 值更新 
STMIA   R1!,{R3-R9}    				;将 R3~R9 的数据存储到 R1 指向的地址上,R1 值更新 
STMFD   SP!,{R0-R7,LR} 				;现场保存,将 R0~R7、LR 入栈 LDMFD   SP!,{R0-R7,PC}^;恢复现场,异常处理返回 

3、 SWP

寄存器和存储器交换指令,SWP 指令用于将一个内存单元(该单元地址放在寄存器Rn 中)的内容读取到一个寄存器 Rd 中,同时将另一个寄存器 Rm 的内容写入到该内存单元中。

指令格式如下: SWP{cond}{B} Rd,Rm,[Rn]、

其中,B 为可选后缀,若有B,则交换字节,否则交换 32 位字;Rd 为数据从存储器加载到的寄存器;Rm 的数据用于存储到存储器中,若 Rm 与 Rn 相同,则为寄存器与存储器内容进行交换;Rn 为要进行数据交换的存储器地址,Rn 不能与 Rd 和 Rm 相同.

SWP 指令举例如下:

SWP      R1,R1,[R0]    	;将 R1 的内容与 R0 指向的存储单元的内容进行交换 

SWP      R1,R2,,[R0]    ;将R0指向的存储单元内容读取一字节数据到R1中(高24 位清零),并将R2的内容写入到该内存单元中(最低字节有效)

数据传送指令

4、MOV

数据传送指令,将 8 位图立即数或寄存器(operant2)传送到目标寄存器 Rd,可用于移位运算等操作。

指令格式如下:

MOV{cond}{S} Rd,operand2

MOV 指令举例如下:

MOV    R1#0x10         ;R1=0x10 
MOV    R0,R1           ;R0=R1 
MOVS   R3,R1,LSL #2    ;R3=R1<<2,并影响标志位 
MOV    PC,LR           ;PC=LR ,子程序返回 

5、MVN

数据非传送指令,将8 位图立即数或寄存器(operand2)按位取反后传送到目标寄存器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数。

指令格式如下:

MVN{cond}{S} Rd,operand2

MVN 指令举例如下:

 MVN      R1,#0xFF  ;R1=0xFFFFFF00 
 MVN      R1,R2      ;将 R2 取反,结果存到 R1

算术逻辑运算指令

6、ADD

加法运算指令,将 operand2 数据与 Rn 的值相加,结果保存到 Rd 寄存器。

指令格式如下:

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

ADD 指令举例如下:

ADDS      R1,R1,#1       ;R1=R1+1 
ADD       R1,R1,R2       ;R1=R1+R2 
ADDS      R3,R1,R2,LSL #2 ;R3=R1+R2<<2

7、SUB

减法运算指令,用寄存器 Rn 减去 operand2.结果保存到 Rd 中。

指令格式如下:SUB{cond}{S} Rd,Rn,operand2

SUB 指令举例如下:

 SUBS    R0,R0,#1         ;R0=R0-1 
 SUBS    R2,R1,R2         ;R2=R1-R2 
 SUB     R6,R7,#0x10      ;R6=R7-0x10 

8、RSB

逆向减法指令,用寄存器 operand2 减法 Rn,结果保存到 Rd 中。

指令格式如下:RSB{cond}{S} Rd,Rn,operand2

RSB 指令举例如下:

 RSB   R3,R1,#0xFF00    	;R3=0xFF00-R1 
 RSBS  R1,R2,R2,LSL #2   	;R1=R2<<2-R2=R2×3 
 RSB   R0,R1,#0         	;R0=-R1

9、ADC

带进位加法指令,将 operand2 的数据与 Rn 的值相加,再加上 CPSR 中的 C 条件标志位,结果保存到 Rd 寄存器。

指令格式如下; ADC{cond}{S} Rd,Rn,operand2 ADC

指令举例如下:

ADDS   R0,R0,R2   
ADC    R1,R1,R3   ;使用 ADC 实现 64 位加法,(R1、R0)=(R1、R0)+(R3、R2) 

10、SBC

带进位减法指令。用寄存器 Rn 减去 operand2,再减去 CPSR 中的 C 条件标志位的非(即若 C 标志清零,则结果减去 1),结果保存到 Rd 中。

指令格式如下: SCB{cond}{S} Rd,Rn,operand2

SBC 指令举例如下:

 SUBS   R0,R0,R2 
 SBC    R1,R1,R3    ;使用 SBC 实现 64 位减法,(R1,R0)-(R3,R2)

11、RSC

带进位逆向减法指令。用寄存器 operand2 减去 Rn,再减去 CPSR 中的 C 条件标志位,结果保存到 Rd 中。

指令格式如下:RSC{cond}{S} Rd,Rn,operand2

RSC 指令举例如下:

RSBS     R2,R0,#0 
RSC      R3,R1,#0   ;使用 RSC 指令实现求 64 位数值的负数

12、AND

逻辑与操作指令,将 operand2 值与寄存器 Rn 的值按位作逻辑与操作,结果保存到Rd 中。

指令格式如下: AND{cond}{S} Rd,Rn,operand2

AND 指令举例如下:

ANDS     R0,R0,#x01  ;R0=R0&0x01,取出最低位数据 
AND      R2,R1,R3    ;R2=R1&R3 

13、ORR

逻辑或操作指令,将operand2的值与寄存器Rn的值按位作逻辑或操作,结果保存到Rd 中。

指令格式如下:ORR{cond}{S} Rd,Rn,operand2 ORR

指令举例如下:

ORR     R0,R0,#x0F    			;将 R0 的低 4 位置 1 
MOV     R1,R2,LSR #4 
ORR     R3,R1,R3,LSL #8 		;使用 ORR 指令将近 R2 的高 8 位数据移入到 R3 低 8 位 中 

14、 EOR

逻辑异或操作指令。将operand2的值与寄存器Rn的值按位作逻辑异或操作,结果保存到 Rd 中。

指令格式如下: EOR{cond}{S} Rd,Rn,operand2

EOR 指令举例如下

EOR     R1,R1,#0x0F 		;将 R1 的低 4 位取反 
EOR     R2,R1,R0    		;R2=R1^R0 
EORS    R0,R5,#0x01 		;将 R5 和 0x01 进行逻辑异或,结果保存到 R0,并影响标志位
console.log("公众号:虫术")
console.log("wx:spiderskill")
console.log("博客:https://404nofoundx.github.io/")
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:53:52  更:2021-09-08 10:55:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 9:14:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计