汇编的使用总结

一、汇编的组成

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.mzph.cn/pingmian/68437.shtml

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

相关文章

python实现dbscan

python实现dbscan 原理 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。它将簇定义为密度相连的点的最大集合&#xff0c;能够把具有足够高密度的区域划分为簇&#xff0c;并可在噪声的空间数据库中发现任意形…

gesp(C++六级)(4)洛谷:B3874:[GESP202309 六级] 小杨的握手问题

gesp(C六级)&#xff08;4&#xff09;洛谷&#xff1a;B3874&#xff1a;[GESP202309 六级] 小杨的握手问题 题目描述 小杨的班级里共有 N N N 名同学&#xff0c;学号从 0 0 0 至 N − 1 N-1 N−1。 某节课上&#xff0c;老师安排全班同学进行一次握手游戏&#xff0c;具…

【自然语言处理(NLP)】机器翻译之数据处理(数据收集、数据清洗、数据分词、数据标注、数据划分)

文章目录 介绍机器翻译之数据处理数据收集数据清洗数据分词数据标注数据划分代码实现导包数据查看处理函数数据预处理词元化统计每句话的长度的分布情况截断或者填充文本序列将机器翻译的文本序列转换成小批量tensor加载数据试用一下 个人主页&#xff1a;道友老李 欢迎加入社区…

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…

单链表算法实战:解锁数据结构核心谜题——链表的回文结构

题目如下&#xff1a; 解题过程如下&#xff1a; 回文结构举例&#xff1a; 回文数字&#xff1a;12521、12321、1221…… 回文字符串&#xff1a;“abcba”、“abba”…… 并不是所有的循环嵌套的时间复杂度都是O(n^2) 可以用C写C程序&#xff1a; C里可以直接使用ListNode…

计算机网络 (58)无线局域网WLAN

前言 无线局域网WLAN&#xff08;Wireless Local Area Network&#xff09;是一种利用无线通信技术将计算机设备互联起来&#xff0c;构成可以互相通信和实现资源共享的网络体系。 一、定义与特点 定义&#xff1a; WLAN通过无线信道代替有线传输介质连接两个或多个设备形成一个…

10 款《医学数据库和期刊》查阅网站

在毕业设计过程中,需要查阅到关于医学的相关文献和图片作为参考,发现下面10款非常的好用,作为分享。 1. PubMed: PubMed 搜索关键词如“lung cancer CT images”或“lung cancer CT scan”。 Radiopaedia: https://radiopaedia.org/ 这是一个放射学专业网站,有大量肺癌的CT…

OpenCV:形态学梯度

目录 简述 1. 用图像运算和腐蚀实现形态学梯度 1.1 代码示例 1.2 运行结果 2. 形态学梯度接口 2.1 参数解释 2.2 代码示例 2.3 运行结果 3. 形态学梯度与边缘检测 4. 形态学梯度的应用场景 5. 注意事项 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 简述…

Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

字符设备驱动模版-中断

字符设备驱动模版-中断 思维导图在线高清查看&#xff1a;https://www.helloimg.com/i/2025/01/27/679791b5257c0.png 修改设备树 1添加pinctrl节点 1创建对应的节点 在 iomuxc 节点的 imx6ul-evk 子节点下 2添加“fsl,pins”属性 3在“fsl,pins”属性中添加PIN配置信息 …

【SH】Windows禁用Alt+F4关机、重启、注销等功能,只保留关闭应用的功能

文章目录 组策略编辑器参考文档 组策略编辑器 亲测有效&#xff01; 1、按winr&#xff0c;输入gpedit.msc&#xff0c;回车。 2、找到》用户配置》管理模板》“开始”菜单和任务栏。 3、在右侧找到删除并阻止访问“关机”、“重新启动”、“睡眠”和“休眠”命令&#xff0c…

【深度学习】线性回归的简洁实现

线性回归的简洁实现 在过去的几年里&#xff0c;出于对深度学习强烈的兴趣&#xff0c;许多公司、学者和业余爱好者开发了各种成熟的开源框架。 这些框架可以自动化基于梯度的学习算法中重复性的工作。 目前&#xff0c;我们只会运用&#xff1a; &#xff08;1&#xff09;通…

C++中的显式构造和隐式构造

文章目录 一、概述二、显式构造函数的使用三、隐式构造函数的使用四、显式和隐式的适用场景 一、概述 在 C 中&#xff0c;构造函数可以分为 显式构造 和 隐式构造&#xff0c;它们的区别主要体现在构造函数的调用方式上。 1.显式构造&#xff08;Explicit Constructor&#…

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战

服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…

浅谈文献阅读(reference)对留学论文写作的重要性

很多留学生在写作留学论文时&#xff0c;拿到题目后就急于求成立马动笔写作。可是写着写着就会陷入非常迷惘的境地&#xff0c;不知道如何继续。当然这其中有很多原因&#xff0c;但其中最重要的一条&#xff0c;就是在写作英语论文之前&#xff0c;没有进行足够的知识积累&…

提升企业内部协作的在线知识库架构与实施策略

内容概要 在当前快速变化的商业环境中&#xff0c;企业对于提升内部协作效率的需求愈显迫切。在线知识库作为信息存储与共享的平台&#xff0c;成为了推动企业数字化转型的重要工具。本文将深入探讨如何有效打造与实施在线知识库&#xff0c;强调架构设计、知识资产分类管理及…

网络工程师 (3)指令系统基础

一、寻址方式 &#xff08;一&#xff09;指令寻址 顺序寻址&#xff1a;通过程序计数器&#xff08;PC&#xff09;加1&#xff0c;自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址&#xff1a;通过转移类指令直接或间接给出下一条指令的地址。跳…

【数据结构】_以SLTPushBack(尾插)为例理解单链表的二级指针传参

目录 1. 第一版代码 2. 第二版代码 3. 第三版代码 前文已介绍无头单向不循环链表的实现&#xff0c;详见下文&#xff1a; 【数据结构】_不带头非循环单向链表-CSDN博客 但对于部分方法如尾插、头插、任意位置前插入、任意位置前删除的相关实现&#xff0c;其形参均采用了…

【Samba】Ubuntu20.04 Windows 共享文件夹

【Samba】Ubuntu20.04 Windows 共享文件夹 前言整体思路检查 Ubuntu 端 和 Windows 网络通信是否正常创建共享文件夹安装并配置 Samba 服务器安装 Samba 服务器创建 Samba 用户编辑 Samba 配置文件重启 Samba 服务器 在 Windows 端 访问 Ubuntu 的共享文件夹 前言 本文基于 Ub…

Linux初识——基本指令(2)

本文将继续从上篇末尾讲起&#xff0c;讲解我们剩下的基本指令 一、剩余的基本指令 1、mv mv指令是move&#xff08;移动&#xff09;的缩写&#xff0c;其功能为&#xff1a;1.剪切文件、目录。2.重命名 先演示下重命名&#xff0c;假设我想把当前目录下的di34改成dir5 那…