学过的汇编指令整合

1.数据搬移指令

<opcode>{<cond>}{s} <Rd>, <shifter_operand>

解释: <opcode>:指令码

{<cond>}:条件码

{s}:状态位,如果在指令后面加上s,则运算的结果会影响CPSR的条件位

<Rd>:目标寄存器

<shifter_operand>:第一操作数,可以是寄存器,也可以是立即数 按照指令码将第一操作数运算后的结果保存在目标寄存器

指令码功能:

mov:将第一操作数的值保存在目标寄存器

mvn:将第一操作数的值按位取反,将结果保存在目标寄存器

2.移位指令 

格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

解释:将第一操作寄存器的数值移位第二操作数指定的位数,将结果保存在目标寄存器中

指令码:

LSL:左移运算 低位补0

LSR:右移运算 高位补0

ROR:循环右移:低位移出的值补到高位

 3.位运算指令

格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

解释:将第一操作寄存器和第二操作数进行位运算,将结果保存在目标寄存器中

指令码:

and:与 与0清0 与1不变

orr:或 或1置1 或0不变

eor:异或 相同为0 不同为1

bic:按位清零指令,想将哪一位设置为0,只需要用bic指令给这一位运算一个1即可

4.算数运算指令

格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

解释:将第一操作寄存器的值和第二操作数进行算数运算,结果保存在目标寄存器中

add:加法运算

adc:进行加法运算时需要考虑CPSR的条件位

sub:减法运算

sbc:进行减法运算时需要考虑CPSR的条件位

mul:乘法运算

5.比较指令

格式: cmp 第一操作数,第二操作寄存器

比较两个数据

cmp命令本质:实际上就是比较的两个数进行减法运算,并且减法运算的结果会影响到CPSR寄存器的条件位

通常比较指令完毕之后会使用条件码进行判断,根据判断的结果做不同的逻辑

 条件码:

 

6. 跳转指令

<opcode>{<cond>} 标签

功能:跳转到指定的标签下

指令码:

b:跳转时不影响LR寄存器的值

7.单寄存器内存读写指令

指令码{条件码} 目标寄存器 [目标地址]

str 目标寄存器 ,[目标地址]:将目标寄存器的数据写入到以目标地址为起始的内存中

ldr 目标寄存器 ,[目标地址]:从以目标地址为起始的内存中读一个字的数据到目标寄存器

 向内存中写:

str:向内存中写一个字(4字节)的数据

strh:向内存写半个字(2字节)的数据

strb:向内存写一个字节的数据

从内存读:

ldr:从内存读取一个字的数据

ldrh:从内存读取半个字的数据

ldrb:从内存读取一个字节的数据

8.批量寄存器的内存读写指令

向内存写:

stm 目标地址,{寄存器列表}

将寄存器列表中每一个寄存器的值都写道目标地址指向的连续空间之中

从内存读

ldm 目标地址,{寄存器列表}

将目标地址指向的连续内存中的数据读到寄存器列表中的寄存器中

注意事项:

1.如果寄存器列表中寄存器的编号连续,可以用-表示列表,如果不连续,用,分割寄存器

{r1-r5,r7}

2.无论寄存器列表中如何表示,我们在读写内存的时候始终是低地址 对应低寄存器编号

批量寄存器的地址增长方式:

ia后缀

ib后缀

da后缀

db后缀

9.栈内存读写指令

增栈:压栈结束后,栈顶往地址大的方向增长

减栈:压栈结束后,栈顶往地址小的方向增长

空栈:压栈结束后,栈顶区域没有有效数据

满栈:压栈结束后,栈顶区域存放有效数据

空增栈(EA)/空减栈(ED)/满增栈(FA)/满减栈(FD)

ARM使用的栈是满减栈

 

9.1栈实例---叶子函数的调用过程

.text  
.global _start _start:ldr sp,=0X40000020 @初始化栈b main
main:mov r1,#1mov r2,#2bl funcadd r3,r1,r2b mainfunc:
@压栈保护现场stmfd sp!,{r1,r2}mov r1,#3mov r2,#4sub r4,r2,r1@出栈恢复现场ldmfd sp!,{r1,r2}mov pc,lr  @返回main函数wh: b wh  .end 

9.2栈实例---非叶子函数的调用过程

.text  
.global _start _start:ldr sp,=0X40000020 @初始化栈b main
main:mov r1,#1mov r2,#2bl funcadd r3,r1,r2b mainfunc:
@压栈保护现场stmfd sp!,{r1,r2,lr}mov r1,#3mov r2,#4bl fun1sub r4,r2,r1@出栈恢复现场ldmfd sp!,{r1,r2,lr}mov pc,lr  @返回main函数
fun1:
@压栈保护现场stmfd sp!,{r1,r2}mov r1,#4mov r2,#5mul r5,r1,r2@出栈恢复现场ldmfd sp!,{r1,r2}mov pc,lrwh: b wh  .end 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

傅里叶系列 P2 的定价选项

系列上文&#xff1a;傅里叶系列 P1 的定价选项_无水先生的博客 一、说明 通过本文&#xff0c;您可以了解&#xff1a; 如何从知道什么是傅里叶级数到能够在黑色下为期权定价。 如果您想了解更多关于傅里叶级数基础知识的信息&#xff0c;请查看第 1 部分。随附笔记本&#…

objective-c 基础学习

目录 第一节&#xff1a;OC 介绍 ​​第二节&#xff1a;Fundation 框架 ​第三节&#xff1a;NSLog 相对于print 的增强 ​第四节&#xff1a;NSString ​第五节&#xff1a;oc新增数据类型 第六节&#xff1a; 类和对象 ​类的方法的声明与实现 ​第七节&#xff1a;类…

pytorch各种loss函数

pytorch各种loss函数 各种loss函数各种loss函数 Loss Functionsnn.L1Loss创建一个标准来测量输入中每个元素x和目标y之间的平均绝对误差(MAE)nn.MSELoss创建一个标准,用于测量输入中每个元素x和目标y之间的均方误差(L2范数的平方)。nn.CrossEntropyLoss该准则计算输入logits与…

如何在Go中格式化字符串

由于字符串通常由书面文本组成&#xff0c;在很多情况下&#xff0c;我们可能希望通过标点符号、换行和缩进来更好地控制字符串的外观&#xff0c;以使其更易于阅读。 在本教程中&#xff0c;我们将介绍一些处理go字符串的方法&#xff0c;以确保所有输出文本的格式正确。 字…

智慧公厕整体解决方案,厕所革命实施方案的范本

随着城市化进程的不断加快&#xff0c;智慧城市应用正成为未来城市发展的重要方向。其中&#xff0c;智慧公厕作为城市基础设施的重要组成部分&#xff0c;其建设范本已经成为各建设中的智慧城市不可或缺的重要内容。那么&#xff0c;如何打造智慧公厕整体解决方案&#xff1f;…

将数组和减半的最少操作【贪心2】

题目&#xff1a;将数组和减半的最少操作 贪心思路&#xff1a;每次挑选最大的数来减半。 解法&#xff1a;贪心大根堆 class Solution { public:int halveArray(vector<int>& nums) {priority_queue<double> heap;double sum 0.0;for(int& x : nums){hea…

(四)激光线扫描-光平面标定

在上一章节,已经实现了对激光线条的中心线提取,并且在最开始已经实现了对相机的标定,那么相机标定的作用是什么呢? 就是将图像二维点和空间三维点之间进行互相转换。 1. 什么是光平面 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交…

代码随想录刷题 Day28

216.组合总和III 和前一个题一样&#xff0c;照着自己就能写出来&#xff0c;就多了一个判断结果是不是等于n的逻辑。有两个地方可以剪纸&#xff0c;一个是当和已经大于要找的时候直接返回&#xff0c;另一个是当剩余元素少于三个的时候直接返回&#xff08;第一层递归是少于…

MAC 如何解决GitHub下载速度慢的问题

说在前面 解决github下载速度慢的方法很多&#xff0c;本文主要介绍通过Git镜像的方式解决下载慢的问题。 主要步骤有&#xff1a;1、找到gitconfig文件&#xff0c; 2、通过git命令查看当前生效的config 配置 3、使用git config命令编辑并添加国内镜像源 1、gitconfig 文件在…

Android etc1tool之png图片转换pkm 和 zipalign简介

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、etc1tool2.1、用法 三、zipalign3.1 使用 四…

在Mac M2本地注册GitLab runner

最近在搞公司的CI/CD&#xff0c;简单记录下部分过程 安装runner sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64" 创建runner 这个步骤需要在gitlab中进行&am…

Qt全屏显示与退出

仿照 按Escape键退出程序中的实现&#xff0c;我们在程序开始的时候全屏显示&#xff0c;按esc键的时候退出全屏。 showFullScreen 全屏显示只需要调用QWidget类&#xff08;QMainWindow也是一个QWidget类&#xff09;的 showFullScreen() 成员函数即可。 退出全屏&#x…

【光伏场地建设规划】python实现-附ChatGPT解析

1.题目 光伏场地建设规划 知识点:数组、动态规划 时间限制:1s 空间限制: 256MB 限定语言:不限 题目描述: 祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区,整体上常年光照良好,但是也有一些地区光照不太好。 某电力公司希望在这里建设多个光伏电站,生产…

持续集成部署-k8s-核心概念-资源与对象

持续集成部署-k8s-核心概念-资源与对象 1. 资源清单1.1 K8S 的资源清单1.2 常用字段解释2. 对象规约与状态3. 资源的分类:元空间、集群、命名空间3.1 元数据类型3.2 集群类型3.2.1 Namespace3.2.2 Node3.2.3 ClusterRole3.2.4 ClusterRoleBinding3.2 命名空间级3.2.1 工作负载…

电脑右键新建记事本不见了--设置恢复篇(无需操作注册表)

电脑右键新建记事本不见了–设置恢复篇&#xff08;无需修改注册表&#xff09; 电脑不知怎么想右键新建记事本结果竟然不见了&#xff0c;搜寻网上的都是什么修改注册表&#xff0c;粘贴代码修复&#xff08;感觉太复杂了&#xff09;&#xff0c;这里介绍通过设置内重新对记…

北京开发APP需要多少钱

北京开发一个移动应用&#xff08;APP&#xff09;的费用因多种因素而异&#xff0c;包括项目的规模、复杂性、所需功能、设计要求、技术选择、开发团队的经验和地理位置等。一般来说&#xff0c;北京的APP开发费用通常较高&#xff0c;因为这是中国的主要技术和创新中心之一&a…

5.5线程同步机制类封装及线程池实现

文章目录 5.5线程同步机制类封装及线程池实现线程池线程同步机制类封装线程池实现 5.5线程同步机制类封装及线程池实现 线程池 线程池是由服务器预先创建的一组子线程&#xff0c;线程池中的线程数据应该与CPU数据差不多。线程池中的所有子线程都运行着相同的代码。当有新的任…

QT 之数据库 QSqlQuery CURD 实战

零、参考文档 https://doc.qt.io/archives/qt-6.0/qsqldatabase.html 一、开发环境 Ubuntu 20.04 QT6.0 Microsoft SQL Server 2022 Developer Edition (64-bit) 先修改 /etc/odbc.ini 的数据源配置&#xff0c;指定连接数据库 vdb&#xff0c; sudo vim /etc/odbc.ini[mss…

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…

快速上手Apache POI

哈喽~大家好&#xff0c;这篇我们来看看快速上手Apache POI。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【日常学习上的分享】 &#x1f949;与这篇相关的文章&#xff1a; Red…