汇编知识点汇总

embedded/2025/2/4 16:32:21/

汇编的组成

  • 汇编指令
    • 数据处理指令
      • 数据搬移指令
      • 数据位移指令
      • 位运算指令
      • 算术运算指令
      • 比较指令
    • 跳转指令
    • 内存读写指令
    • 状态寄存器传送指令
    • 异常产生指令
    • 协处理器指令
  • 伪操作
    • 在程序编译过程中起到编译引导作用的内容
    •  .text  .global  .if  .else  .endif
  • 伪指令
    • 不是汇编指令,但是可以起到指令的作用,会占用一定内存空间
  • 注释
    • 单行注释:@         ;
    • 多行注释:/*         */
    • 条件注释:.if   .else   .endif

立即数

循环左移偶数位,取反(或不取)能得到0-255之间的数(8位以内)就是立即数

数据搬移指令

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

功能:将操作数搬移到目标寄存器中,相当于赋值

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

功能:将操作数按位取反后结果搬移到目标寄存器中

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

数据移位指令

逻辑左移

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

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

逻辑右移

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

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

循环右移

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

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

补充:汇编中对操作数书写的形式可以写成c语言风格的移位运算形式

ex:LSL R1,R0,#(0X1<<2)

位运算指令

与运算(and),与0清零,与1不变

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

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

或运算(orr),有1位1,全0为0

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

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

异或运算(eor),相同为0,不同为1

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

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

按位取反(mvn),0为1,1为0

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

        功能: 将第一操作寄存器中的数和第二操作数进行按位取反运算,将结果保存到目标寄存器中

按位清零(bic),指定位和1运算零

算术运算指令

加法指令

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

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

包含cpsr条件位的加法指令

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

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

减法指令

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

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

包含cpsr条件位的减法指令

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

        功能: 目标寄存器=第一操作寄存器+-第二操作数-cpsr寄存器c位的取反值

乘法指令

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

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

模拟32位处理器进行64位数据运算

32位处理器一条指令最大能进行32位数据运算,想要进行64位运算,需要多条指令

第一个64位数据:

        0x00000003 FFFFFFFE

第二个64位数据

        0X00000005 00000006

运算原则:

低32位先运算,结果会影响cpsr条件位

高32位后运算,运算过程包含cpsr条件位


http://www.ppmy.cn/embedded/159513.html

相关文章

利用Python高效处理大规模词汇数据

在本篇博客中&#xff0c;我们将探讨如何使用Python及其强大的库来处理和分析大规模的词汇数据。我们将介绍如何从多个.pkl文件中读取数据&#xff0c;并应用一系列算法来筛选和扩展一个核心词汇列表。这个过程涉及到使用Pandas、Polars以及tqdm等库来实现高效的数据处理。 引…

SpringBoot源码解析(九):Bean定义接口体系

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args Sp…

STM32_SD卡的SDIO通信_DMA读写

本篇&#xff0c;将使用CubeMXKeil&#xff0c;创建一个SD卡的DMA读写工程。 目录 一、简述 二、CubeMX 配置 SDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、简述 上篇已简单介绍了SD、SDIO&#xff0c;本篇不再啰嗦&#xff0c;…

网络安全 | F5-Attack Signatures-Set详解

关注&#xff1a;CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集&#xff1a;使用过滤器或手动选择要包含的签名。  基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于&#xff0c;可以专注于定义用户感兴趣的攻击签名…

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

【论文复现】基于维度狩猎学习的改进秃鹰搜索算法用于自动驾驶问题

目录 1.摘要2.秃鹰搜索算法BES原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 由于道路曲率穿透和参数不确定性带来的侧向偏差&#xff0c;自动驾驶车辆控制器面临提供准确、快速响应及小幅超调等性能挑战。本文提出了一种基于维度狩猎学习&#xff08;DLH&#xff09;…

攻防世界 fileclude

代码审计 WRONG WAY! <?php include("flag.php"); highlight_file(__FILE__);//高亮显示文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"]))//检查file1和file2参数是否存在 {$file1 $_GET["file1"];$fi…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…