汇编的使用总结

一、汇编的组成

1、汇编指令(指令集)

        数据处理指令:

                数据搬移指令

                数据移位指令

                位运算指令

                算术运算指令

                比较指令

        跳转指令

        内存读写指令

        状态寄存器传送指令

        异常产生指令等

2、伪指令

        不是汇编指令,但是可以起到指令的作用,伪指令也会占用一定内存空间

3、伪操作

        不占用指令内存,能够在程序编译过程中起到编译引导作用的内容

4、注释

二、汇编指令

2.1基本格式 

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

注释:

        opcode:指令的功能码,用来表示当前指令的作用

(可以写,也可以不写        

        cond:条件码

        s:表示进行运算时运算的结果会影响到CPSR条件位

  )

        Rd:目标寄存器

        Rn:第一操作寄存器

        shifter_operand:第二操作寄存器

 2.2数据搬移指令

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

        将操作数搬移到目标寄存器

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

        将操作数按位取反后搬移到目标寄存器

注意:

        操作数可以是一个寄存器,也可以是一个立即数

立即数:能够经过编码之后保存到指令空间中直接当作指令一部分去执行的数据。

如果想要把一个非立即数搬移到目标寄存器,使用伪指令ldr,格式:ldr  目标寄存器,=数据

2.3数据移位指令

1、逻辑左移

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

                将第一操作寄存器的数据左移第二操作数位数,结果保存到目标寄存器

2、逻辑右移

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

                将第一操作寄存器的数据右移第二操作数位数,结果保存到目标寄存器

3、循环右移

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

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

2.4位运算指令 

1、与运算

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

                将第一操作寄存器的数据和第二操作数进行与运算,结果保存到目标寄存器

2、或运算

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

                将第一操作寄存器的数据和第二操作数进行或运算,结果保存到目标寄存器

3、异或运算

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

                将第一操作寄存器的数据和第二操作数进行异或运算,结果保存到目标寄存器

4、按位取反

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

5、按位清零

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

                将第一操作寄存器的数据和第二操作数进行与运算,结果保存到目标寄存器

2.5算术运算

1、加法运算

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

                目标寄存器=第一操作寄存器+第二操作数

2、考虑CPSR条件位的加法运算

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

                目标寄存器=第一操作寄存器+第二操作数+cpsr寄存器c位的值

3、减法运算

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

                目标寄存器=第一操作寄存器-第二操作数

4、考虑CPSR条件位的减法运算

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

                目标寄存器=第一操作寄存器-第二操作数-cpsr寄存器c位的值

5、乘法运算

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

                目标寄存器=第一操作寄存器*第二操作数

 2.6比较指令

1、cmp        第一操作寄存器,第二操作数

        将第一操作寄存器和第二操作数进行比较

2、tst        目标寄存器,#(0x1<<N)

        用来判断目标寄存器的第N位是否为0

3、teq         目标寄存器,第二操作数

        判断目标寄存器的值是否和第二操作数相等

2.7跳转指令 

1、b        标签

        跳转到指定的标签下,跳转后LR寄存器不保存程序返回地址

2、bl        标签

        跳转到指定的标签下,跳转后LR寄存器保存程序返回地址

2.8内存读写指令 

①单寄存器内存读写指令

写:

        1、str        目标寄存器,[目标地址]

                将目标寄存器中四字节数据写入到目标地址对应的内存中  

        2、strh        目标寄存器,[目标地址]

                将目标寄存器中二字节数据写入到目标地址对应的内存中

        3、strb        目标寄存器,[目标地址]

                将目标寄存器中一字节数据写入到目标地址对应的内存中

读:

        1、ldr        目标寄存器,[目标地址]

                从目标寄存器中读取四字节数据到目标地址对应的内存中  

        2、ldrh        目标寄存器,[目标地址]

                将目标寄存器中读取二字节数据到目标地址对应的内存中

        3、ldrb        目标寄存器,[目标地址]

                将目标寄存器中读取一字节数据到目标地址对应的内存中


②批量寄存器内存读写指令

写:

        1、stm        基地址,{寄存器列表}

                将寄存器列表中所有寄存器的数据写入到基地址为首地址的内存中 

读:

        1、ldm        基地址,{寄存器列表}

                从基地址开始往下读取数据,保存到寄存器列表中的每一个寄存器中

批量寄存器地址增长方式

        Ⅰ、ia后缀        先向基地址读写数据,基地址再往大地址方向增长

        Ⅱ、ib后缀       基地址先往大地址方向增长,再向基地址读写数据

        Ⅲ、da后缀         先向基地址读写数据,基地址再往小地址方向增长

        Ⅳ、da后缀        基地址先往小地址方向增长,再向基地址读写数据         


③栈内存读写

        压栈:

                push        {寄存器列表}

        出栈:

                pop        {寄存器列表}

栈的分类:

        1、空栈和满栈

        2、增栈和减栈

        组合:空增栈(EA)        空减栈(ED)        满增栈(FA)        满减栈(FD)

2.9状态寄存器传送指令

1、读状态寄存器指令

        mrs        目标寄存器,CPSR

                读取CPSR寄存器数值,保存到目标寄存器

2、修改状态寄存器

        msr        CPSR,操作数

                修改CPSR寄存器的数值为操作数

2.10软中断产生指令 

1、swi        操作数

        操作数是一个立即数,就是产生软中断的中断号

异常模式和异常源

 

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

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

相关文章

汇编基础语法及其示例

1.汇编指令 1.1汇编指令的基本格式 <opcode>{<cond>}{s} <Rd> , <Rn> , <shifter_operand> <功能码>{<条件码>}{cpsr影响位} <目标寄存器> , <第一操作寄存器> , <第二操作数> 注&#xff1a;第一操作寄存器…

FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验

文章目录 FLTK - FLTK1.4.1 - 搭建模板&#xff0c;将FLTK自带的实现搬过来做实验概述笔记my_fltk_test.cppfltk_test.hfltk_test.cxx用adjuster工程试了一下&#xff0c;好使。END FLTK - FLTK1.4.1 - 搭建模板&#xff0c;将FLTK自带的实现搬过来做实验 概述 用fluid搭建UI…

基于物联网设计的疫苗冷链物流监测系统

一、前言 1.1 项目开发背景 随着全球经济的发展和物流行业的不断创新&#xff0c;疫苗和生物制品的运输要求变得越来越高。尤其是疫苗的冷链物流&#xff0c;温度、湿度等环境因素的控制直接关系到疫苗的质量和效力&#xff0c;因此高效、可靠的冷链监控系统显得尤为重要。冷…

JVM对象分配内存如何保证线程安全?

大家好&#xff0c;我是锋哥。今天分享关于【JVM对象分配内存如何保证线程安全?】面试题。希望对大家有帮助&#xff1b; JVM对象分配内存如何保证线程安全? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中&#xff0c;对象的内存分配是通过堆内存进行的。…

移动光猫怎么自己改桥接模式?

环境&#xff1a; 型号H3-8s 问题描述&#xff1a; 家里宽带用的是H3-8s 光猫&#xff0c;想改桥接模式。 解决方案&#xff1a; 1.默认管理员账号和密码&#xff1a; 账号&#xff1a;CMCCAdmin 密码&#xff1a;aDm8H%MdAWEB页面我试了登陆不了&#xff0c;显示错误 …

大数据Hadoop入门3

第五部分&#xff08;Apache Hive DML语句和函数使用&#xff09; 1.课程内容大纲和学习目标 2.Hive SQL-DML-load加载数据操作 下面我们随机创建文件尝试一下 先创建一个hivedata文件夹 在这个文件夹中写一个1.txt文件 下面使用beeline创建一张表 只要将1.txt文件放在t_1文件…

2025.1.26机器学习笔记:C-RNN-GAN文献阅读

2025.1.26周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 总结 文献阅读 题目信息 题目&#xff1a; C-RNN-GAN: Continuous recurrent neural networks with adversarial training会议期刊&#xff1a; NIPS作者&#xff1a; Olof Mogren发表时间…

基于物联网的火灾报警器设计与实现(论文+源码)

1 总体方案设计 本次基于物联网的火灾报警器&#xff0c;其系统总体架构如图2.1所示&#xff0c;采用STM32f103单片机作为控制器&#xff0c;通过DS18B20传感器实现温度检测&#xff1b;通过MQ-2烟雾传感器实现烟雾检测&#xff1b;.通过火焰传感器实现火焰检测&#xff0c;当…

ResNeSt: Split-Attention Networks论文学习笔记

这张图展示了一个名为“Split-Attention”的神经网络结构&#xff0c;该结构在一个基数组&#xff08;cardinal group&#xff09;内进行操作。基数组通常指的是在神经网络中处理的一组特征或通道。图中展示了如何通过一系列操作来实现对输入特征的注意力机制。 以下是图中各部…

模糊综合评价

模糊综合评价的特点主要体现在以下几个方面&#xff1a; 一、系统性强 模糊综合评价法能够综合考虑多种因素的影响&#xff0c;将定性指标和定量指标相结合&#xff0c;对评价对象进行全面、系统的分析。这种方法避免了单一指标评价的片面性&#xff0c;提高了评价的准确性和…

宫本茂的游戏设计思想:有趣与风格化

作为独立游戏开发者之一&#xff0c;看到任天堂宫本茂20年前的言论后&#xff0c;深感认同。 游戏研发思想&#xff0c;与企业战略是互为表里的&#xff0c;游戏是企业战略的具体战术体现&#xff0c;虚空理念的有形载体。 任天堂长盛不衰的关键就是靠简单有趣的游戏&#xf…

deepseek-r1 本地部署

deepseek 最近太火了 1&#xff1a;环境 win10 cpu 6c 内存 16G 2: 部署 1>首先下载ollama 官网&#xff1a;https://ollama.com ollama 安装在c盘 模型可以配置下载到其他盘 OLLAMA_MODELS D:\Ollama 2>下载模型并运行 ollama run deepseek-r1:<标签> 1.5b 7b 8…

electron typescript运行并设置eslint检测

目录 一、初始化package.json 二、安装依赖 1、安装electron 2、安装typescript依赖 3、安装eslint 三、项目结构 四、配置启动项 一、初始化package.json 我的&#xff1a;这里的"main"没太大影响&#xff0c;看后面的步骤。 {"name": "xlo…

每日一题-判断是否是平衡二叉树

判断是否是平衡二叉树 题目描述数据范围题解解题思路递归算法代码实现代码解析时间和空间复杂度分析示例示例 1示例 2 总结 ) 题目描述 输入一棵节点数为 n 的二叉树&#xff0c;判断该二叉树是否是平衡二叉树。平衡二叉树定义为&#xff1a; 它是一棵空树。或者它的左右子树…

WS2812 梳理和颜色表示方法的对比:RGB和HSV

WS2812 WS2812是一种可编程的LED灯&#xff0c;具有RGB显示效果&#xff0c;可显示的颜色数量为2^24。 常用颜色表示方法 表示方法&#xff1a; RGB 表示 加法混色原理&#xff1a;RGB 颜色模型基于加法混色原理&#xff0c;将红&#xff08;Red&#xff09;、绿&#xff08…

一文简单回顾Java中的String、StringBuilder、StringBuffer

简单说下String、StringBuilder、StringBuffer的区别 String、StringBuffer、StringBuilder在Java中都是用于处理字符串的&#xff0c;它们之间的区别是String是不可变的&#xff0c;平常开发用的最多&#xff0c;当遇到大量字符串连接的时候&#xff0c;就用StringBuilder&am…

对游戏宣发的粗浅思考

1.两极分化 认真观摩了mgs系列制作人的x账号&#xff0c; 其更新频率吓死人&#xff0c;一天能发几十条之多&#xff0c;吓死人。大部分都是转发相关账号的ds2或mgs相关内容&#xff0c; 每日刻意的供给这些内容来满足几十万粉丝需求&#xff0c;维护热情。 幕后是专业的公…

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…

实践网络安全:常见威胁与应对策略详解

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在数字化转型的浪潮中&#xff0c;网络安全的重要性已达到前所未有的高度。无论是个人用户、企业&#xff0c;还是政府机构…

Tensor 基本操作2 理解 tensor.max 操作,沿着给定的 dim 是什么意思 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作1 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 Tensor 基本操作torch.max默认指定维度 Tensor 基本操作 torch.max torch.max 实现降维运算&#xff0c;基于指定的 d…