3.15号arm

汇编语言

1. 汇编语言的组成

汇编文件中由伪操作、伪指令、汇编指令以及代码注释这几部分组成

伪操作:
    ARM的汇编中伪操作以.为前缀,所有的伪操作不占用内存空间,编译汇编时告诉编译器怎么编译当前文件,主要用来修改汇编内容的  .text    .global   .globl  .end     .if  .else  .endif

伪指令:不是指令,但是伪指令也会占用指令内存,执行一条伪指令时也会让运算器进行相关运算

汇编指令:汇编指令执行时会让运算器进行相关运算
    数据处理指令
    跳转指令
    内存读写指令
    状态寄存器传送指令
    异常触发指令
    协处理器指令(不讲)

 注释:
        单行注释:@
        多行注释:/*  */
        条件注释: 
            .if 逻辑值
                指令段
            .else
                指令段
            .endif
解释:逻辑值为真,则执行上一段指令,逻辑值为假,则执行else下面的指令段

2.汇编指令格式

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

opcode:汇编指令的指令码

code 条件码

s:当按照指令码对应的指令执行时程序的运行结果会影响到CPSR的条件位

RD:目标寄存器,指令运算的结果保存至目标寄存器中

RN:第一操作寄存器 参与运算的寄存器

shifter_operand:第二操作数 参与运算的数据,可以是寄存器,也可以是一个立即数

操作数前面需要加一个#

将第一操作寄存器的数值和第二操作数按照指令码进行运算,如果指令码后面有s后缀,运算的结果会影响CPSR条件位,指令的运行结果保存至目标寄存器中

3. 汇编指令---数据处理指令

3.1 数据搬移指令

功能:能够将指定的数值搬移到指定的寄存器中

mov{条件码} 目标寄存器,操作数

如果条件码对应的条件满足,则将操作数的值存放到目标寄存器,这个操作数既可以是立即数,也可以是寄存器

mvn{条件码} 目标寄存器,操作数

如果条件码对应的条件满足,则将操作数的值按位取反后存放到目标寄存器,这个操作数既可以是立即数,也可以是寄存器

3.2 立即数

立即数指的是可以直接当作指令的一部分去执行的数据。32位的指令空间中为操作数预留了12位的空间,12位空间分为两部分:低八位和高四位,从0-255范围内找一个数字,让这个数字循环右移偶数位,能够得到的数据就是立即数,否则就不是立即数

3.3 数据移位指令

算术左移:最高位移出,最低位补0

lsl{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数

将第一操作寄存器的数值算术左移第二操作数对应的数值位数,结果保存到目标寄存器中

算术右移:最低位移出,最高位补0

 lsr{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数

将第一操作寄存器的数值算术右移第二操作数对应的数值位数,结果保存到目标寄存器中

循环右移:最低位移出,补到最高位

 ror{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数

将第一操作寄存器的数值循环右移第二操作数对应的数值位数,结果保存到目标寄存器中

3.4 位运算指令

按位与:
and{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数
    将第一操作寄存器的数值和第二操作数进行与运算,运算的结果保存到目标寄存器中
按位或:
orr{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数
    将第一操作寄存器的数值和第二操作数进行或运算,运算的结果保存到目标寄存器中
按位异或:
eor{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数
    将第一操作寄存器的数值和第二操作数进行异或运算,运算的结果保存到目标寄存器中
    
按位取反:
    mvn{条件码} 目标寄存器,操作数

按位清零
BIC{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数
    将第一操作寄存器的数值和第二操作数进行按位清零运算,运算的结果保存到目标寄存器中

3.5 算术运算指令

加法指令:
    add{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第一操作寄存器+第二操作数
    adc{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第一操作寄存器+第二操作数+cpsr寄存器c位的值
减法运算:
    sub{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第一操作寄存器-第二操作数
    sbc{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第一操作寄存器-第二操作数-cpsr寄存器c位的取反值
逆向减法运算:
     rsb{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第二操作数-第一操作寄存器
     rsc{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第二操作数-第一操作寄存器-cpsr寄存器c位的取反值

乘法运算:
    mul{条件码}{s} 目标寄存器,第一操作寄存器,第二操作数 @目标寄存器=第一操作寄存器+第二操作数

3.6 数据比较指令

cmp 第一操作寄存器,第二操作数
比较指令的本质就是两个比较的数3进行减法运算,而且运算的结果会影响到CPSR条件位

我们在比较指令执行完毕后其他的指令后面可以跟上指定的条件码,当该指令执行之前,先去判断条件码对应的条件是否满足,如果满足,则该指令执行,如果不满足,则该指令不执行

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

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

相关文章

QT下跨平台库实现及移植经验分享

最近在移植公司一个QT桌面软件到android上&#xff0c;有一些公司自定义的库&#xff0c;用了很多windows的api&#xff0c;移植过程很是曲折&#xff0c;在此有一些感悟分享一下~ 一.自编写跨平台库 1.有时候为了程序给第三方用需要编译一些qt封装库&#xff0c;并可能跨平台…

【SQL Server】实验四 数据更新

1 实验目的 掌握SQL数据更新语句的基本使用方法&#xff0c;如UPDATE、DELETE、INSERT。掌握更新语句条件中的嵌套查询使用方法。 2 实验内容 2.1 掌握SQL更新语句的基本使用方法 INSERT基本语句。UPDATE基本语句。DELETE基本语句。 2.2 掌握SQL更新语句的高级使用方法 …

Soft Robotics 变结构手掌和变刚度手指的仿人软体手的人机交互操作-武科大ESIR课题组师兄成果

一、引言 在当今的机器人技术领域&#xff0c;人类对机器人的需求日益增长&#xff0c;涉及到工业生产、医疗护理、服务业等各个领域。然而&#xff0c;由于任务的多样性和复杂性&#xff0c;单独依靠自主机器人操作往往难以满足实际需求。为了解决这一问题&#xff0c;人机协作…

社交革命的引领者:探索Facebook如何改变我们的生活方式

1.数字社交的兴起 随着互联网的普及&#xff0c;社交媒体成为我们日常生活的重要组成部分。Facebook作为其中的先驱&#xff0c;从最初的社交网络演变成了一个拥有数十亿用户的全球化平台。它不仅改变了我们与世界互动的方式&#xff0c;还深刻影响了我们的社交习惯、人际关系以…

从 VNCTF2024 的一道题学习QEMU Escape

说在前面 本文的草稿是边打边学边写出来的&#xff0c;文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似&#xff0c;在分析结束以后我又在部分比较模糊的地方加入了一些补充&#xff0c;因此阅读起来可能会相对轻松。&#xff08;当然也不排除这是…

Python面试笔记

Python面试笔记 PythonQ. Python中可变数据类型与不可变数据类型&#xff0c;浅拷贝与深拷贝详解Q. 解释什么是lambda函数&#xff1f;它有什么好处&#xff1f;Q. 什么是装饰器&#xff1f;Q. 什么是Python的垃圾回收机制&#xff1f;Q. Python内置函数dir的用法&#xff1f;Q…

论文阅读——VSA

VSA: Learning Varied-Size Window Attention in Vision Transformers 方法&#xff1a; 给定输入特征X&#xff0c;VSA首先按照基线方法的例程&#xff0c;将这些标记划分为几个窗口Xw&#xff0c;窗口大小为预定义的w。我们将这些窗口称为默认窗口&#xff0c;并从默认窗口中…

Oracle 一键巡检自动生成 Word 报告

前言 Oracle 数据库巡检通常需要消耗大量时间和精力&#xff0c;包括收集数据库以及主机的相关信息。针对 Word 报告的样式调整&#xff0c;也是重复和费事的&#xff0c;所以我针对 Oracle 巡检所需检查的信息以及报告模板&#xff0c;写了一套自动巡检并且生成报告的脚本。巡…

C++语法、Linux命令查询网站

文章目录 1.cplusplus2.cppreference3.Linux命令查询网站 1.cplusplus 网址&#xff1a;https://legacy.cplusplus.com/ 2.cppreference 1.cppreference中文网站&#xff1a;https://zh.cppreference.com/w/首页 2.cppreference英文原站&#xff1a;https://en.cppreference…

Java获取视频封面图,利用FFmpegFrameGrabber获取视频封面图

依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.9</version></dependency>传入视频流获取图片byte /*** 获取视频截图** param frameNumber 视频的指定帧数* param …

Unity AI Navigation插件快速使用方法

AI Navigation插件使您能够创建能够在游戏世界中智能移动的角色。这些角色利用的是根据场景几何结构自动生成的导航网格。障碍物可以让您在运行时改变角色的导航路径。 演示使用的Unity版本为Tuanjie 1.0.0,团结引擎是Unity中国的引擎研发团队基于Unity 2022 LTS版本为中国开发…

C#,图论与图算法,双连通图(Biconnected Components of Graph)的算法与源代码

1 双连通图(Biconnected Components of Graph) 如果任意两个顶点之间有两条顶点不相交的路径,则无向图称为双连通图。在双连通图中,有一个通过任意两个顶点的简单循环。 按照约定,由边连接的两个节点构成双连通图,但这并不验证上述属性。对于具有两个以上顶点的图,必须…

Python Learn day05

Python Learn day05 本文主要讲解 继承、多态、定制类 继承和多态 什么是继承 当新类想要拥有现有类的功能结构&#xff0c;可以使用继承。继承的前提是新类 is a 现有类&#xff0c;即&#xff1a; 子类 is 父类 总是从某个类继承&#xff1a; class Myclass(object):pass…

Hello,Spider!入门第一个爬虫程序

在各大编程语言中&#xff0c;初学者要学会编写的第一个简单程序一般就是“Hello, World!”&#xff0c;即通过程序来在屏幕上输出一行“Hello, World!”这样的文字&#xff0c;在Python中&#xff0c;只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”&…

【Git】Github 上commit后,绿格子contribution却不显示?不知道怎么弥补?解决方法在这里

github 上commit后&#xff0c;绿格子&#xff08;contribution&#xff09;却不显示 问题描述 今天一直在github上面commit代码&#xff0c;但是github中并没有显示自己的contribution&#xff08;没有绿色的格子&#xff09;&#xff0c;全是空白&#xff0c;网上一查是因为…

免费分享一套SpringBoot+Vue自习室(预约)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue自习室预约)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue自习室预约(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue自习室预约(预约)管理系统…

Java项目企业设备管理系统

java项目企业设备管理系统javaweb项目ssm框架项目 运行环境:idea/eclipse tomcat jdk mysql navicat 系统用户分为员工和管理员两类用户。两类用户都可以进行系统的登录&#xff0c;虽然进入的系统主页结构相似&#xff0c;但是在功能上有不同。员工的密码可以自己进入系统后…

【目标检测-数据集准备】DIOR转为yolo训练所需格式

【目标检测】DIOR遥感影像数据集&#xff0c;转为yolo系列模型训练所需格式。 标签文件位于Annotations下&#xff0c;格式为xml&#xff0c;yolo系列模型训练所需格式为txt&#xff0c;格式为 class_id x_center,y_center,w,h其中&#xff0c;train&#xff0c;text&#xff…

Python笔记|字符串的转义

重新梳理一遍python的基础知识 除了数字&#xff0c;Python 还可以操作字符串。字符串有多种表现形式&#xff0c;用单引号&#xff08;……&#xff09;或双引号&#xff08;"……"&#xff09;标注的结果相同 。反斜杠 \ 用于转义&#xff1a; >>>spam e…

java抽象类的作用及解析

在 Java 中&#xff0c;抽象类是一种特殊的类&#xff0c;它可以用于定义一些抽象的方法和属性&#xff0c;这些方法和属性可能在子类中有不同的实现。 抽象类的主要作用包括&#xff1a; 提供抽象方法&#xff1a;抽象类可以包含一些没有具体实现的抽象方法&#xff0c;这些…