汇编知识点汇总

ops/2025/2/6 17:09:33/

汇编的组成

  • 汇编指令
    • 数据处理指令
      • 数据搬移指令
      • 数据位移指令
      • 位运算指令
      • 算术运算指令
      • 比较指令
    • 跳转指令
    • 内存读写指令
    • 状态寄存器传送指令
    • 异常产生指令
    • 协处理器指令
  • 伪操作
    • 在程序编译过程中起到编译引导作用的内容
    •  .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/ops/156199.html

相关文章

jdk8 G1收集器怎么手动调优

在 JDK 8 中&#xff0c;手动调优 G1 垃圾收集器可以通过以下步骤和参数进行&#xff1a; 1. 启用 G1 垃圾收集器 要启用 G1 垃圾收集器&#xff0c;需要在 JVM 启动参数中添加以下选项&#xff1a; -XX:UseG1GC 这个参数告诉 JVM 使用 G1 作为垃圾收集器。 2. 设置堆内存…

国防科大:双目标优化防止LLM灾难性遗忘

&#x1f4d6;标题&#xff1a;How to Complete Domain Tuning while Keeping General Ability in LLM: Adaptive Layer-wise and Element-wise Regularization &#x1f310;来源&#xff1a;arXiv, 2501.13669 &#x1f31f;摘要 &#x1f538;大型语言模型&#xff08;LLM…

了解linux-5.4.31/drivers/gpio/gpiolib-devres.c中的devm_gpiod_get_optional()函数

1、打开“drivers/gpio/gpiolib-devres.c” /** 获取GPIO线的索引,查找“设备资源”,分配“设备资源数据”,注册“设备资源”; * devm_gpiod_get_optional - Resource-managed gpiod_get_optional() * dev: GPIO consumer * con_id: function within the GPIO consumer * fla…

LabVIEW自定义测量参数怎么设置?

以下通过一个温度采集案例&#xff0c;说明在 LabVIEW 中设置自定义测量参数的具体方法&#xff1a; 案例背景 ​ 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度&#xff0c;需自定义以下参数&#xff1a; 采样率&#xff1a;1 kHz 输入量程&#xff1a;0~10 V&a…

【数据结构】_链表经典算法OJ:相交链表

目录 1. 题目链接及描述 2. 解题思路 2.1 思路1&#xff1a;一个链表把另外一个链表的结点逐个轮一遍 2.2 思路2&#xff1a;截断长链表&#xff0c;从距离交点结点前等距处开始同时遍历&#xff08;本题解法&#xff09; 3. 程序 关于解题程序的细节&#xff1a; 3.1…

暴力破解与验证码安全

目录 前言 暴力破解&#xff1a;简单粗暴的黑客攻击手段 暴力破解的前提条件 暴力破解的定义与原理 常见的暴力破解工具 暴力破解的常见场景 暴力破解的危害 验证码&#xff1a;抵御暴力破解的第一道防线 验证码的定义与作用 验证码的工作原理 验证码的类型 验证码…

JDK17主要特性

JDK 17&#xff0c;也被称为Java 17或Java Platform, Standard Edition 17&#xff0c;是Java编程语言的第十七个主要版本&#xff0c;由Oracle公司在2021年9月发布。Java 17是一个长期支持&#xff08;LTS&#xff0c;Long-Term Support&#xff09;版本&#xff0c;这意味着它…

蓝桥杯之c++入门(一)【C++入门】

目录 前言5. 算术操作符5.1 算术操作符5.2 浮点数的除法5.3 负数取模5.4 数值溢出5.5 练习练习1&#xff1a;计算 ( a b ) ⋆ c (ab)^{\star}c (ab)⋆c练习2&#xff1a;带余除法练习3&#xff1a;整数个位练习4&#xff1a;整数十位练习5&#xff1a;时间转换练习6&#xff…