ARM常用汇编指令

2023-11-14

目录

一、汇编基本语法

1、汇编指令的最典型书写模式

二、常用汇编指令

1、push压栈指令

2、pop出栈指令

3、sub指令

4、add指令

5、movs数据传输指令

6、str指令

7、ldr指令

8、bl指令

9、MOVW指令

10、MOVT指令

三、代码分析

1、代码段1


一、汇编基本语法

1、汇编指令的最典型书写模式

标号
        操作码        操作数 1,        操作数 2,     …        ;注释。

标号:是可选的,如果有,它必须顶格写。标号的作用是让汇编器来计算程序转移
的地址。

操作码:操作码是指令的助记符,它的前面必须有至少一个空白符,通常使用一个“Tab”键来
产生。

操作数:一般跟在操作码后面,一个操作码后可以跟多个操作数。

注释:;是注释符号 类似C语言的 “//” 和 “/*” 。

二、常用汇编指令

1、push压栈指令

把若干寄存器的值压入堆栈中。

示例:

push    {r7};将寄存器R7的值压入栈中。

push    {r7, lr};将寄存器R7和LR的值压入栈中。

2、pop出栈指令

从堆栈中弹出若干的寄存器的值。

示例:

pop     {r7}; 将栈顶的值弹出到R7寄存器中。

pop     {r7, pc};将栈顶的两个值弹出到R7和PC寄存器中。

3、sub指令

减法指令。有以下多种用法:

SUB Rd, Rn              ;同C语言 Rd -= Rn; //Rd减去Rn并将结果保存到Rd。
SUB Rd, Rn, #imm3 ;同C语言 Rd = Rn-imm3; //Rn减去立即数imm3并将结果保存到Rd。
SUB Rd, #imm8        ;同C语言 Rd -= imm8; //Rd减去立即数imm8并将结果保存到Rd。
SUB Rd, Rn, Rm       ;同C语言 Rd = Rn-Rm; //Rn减去Rm并将结果保存到Rd。

示例:

sub     sp, sp, #16; sp寄存器中的值减去立即数16,将结果赋值到sp寄存器中。表示栈向下生长。

4、add指令

加法指令。有以下多种用法:

ADD Rd, Rn, Rm ;同C语言 Rd = Rn+Rm;Rn加上Rm并将结果保存到Rd。
ADD Rd, Rm        ;同C语言 Rd += Rm;Rd加上Rm并将结果保存到Rd。
ADD Rd, #imm     ;同C语言 Rd += imm;Rd加上立即数imm并将结果保存到Rd。

示例:

add     r7, sp, #0;  sp寄存器的值加零,将结果保存到寄存器R7。

5、movs数据传输指令

movs r0, #10;将立即数10保存到寄存器R0。

6、str指令

把一个寄存器按字存储到存储器中。把CPU内部寄存器的数据写出到外部RAM等存储器。

STR R0,[R1,#12] ;将R0中的字数据写入以R1+12为地址的存储器中。

7、ldr指令

从存储器读取数据到寄存器中。从RAM等存储器读取数据到CPU的寄存器中。

ldr     r2, [r7, #12]; 从以R1+12为地址的存储器中读取数据到R2寄存器。

8、bl指令

转移并连接。用于呼叫一个子程序,返回地址被存储在 LR 中。对应C语言的函数调用。

BL Putc;调用值程序Putc,Putc为子程序的入口地址。

9、MOVW指令

将16位立即数传送到寄存器的低半字[15:0]中,并将高半字[31:16]清零。

10、MOVT指令

将16位立即数传送到寄存器的高半字[31:16]中。

三、代码分析

1、代码段1

    int a = 0;
    int b = 1;
    int c = a + b;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM常用汇编指令 的相关文章

  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • linux使用文件描述符0、1和2来处理输入和输出

    文件描述符012 在Linux中 文件描述符0 1和2分别代表标准输入 stdin 标准输出 stdout 和标准错误 stderr 它们用于处理进程的输入和输出 文件描述符0 stdin 文件描述符0是进程的标准输入 通常用于读取用户的输
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • linux ARM64 处理器内存屏障

    一 内存类型 ARMv8架构将系统中所有的内存 按照它们的特性 划分成两种 即普通内存和设备内存 并且它们是互斥的 也就是说系统中的某段内存要么是普通内存 要么是设备内存 不能都是 1 普通内存 Normal Memory 普通内存的特性是
  • 移植useradd到嵌入式Linux设备

    友情提示 前面一大段描述的是在老版本Ubuntu14 4交叉编译新版本shadow 过程曲折 没有结果 分割线后面一段是重新换了一个较老版本shadow 4 4 过程丝滑 结果喜人 诸君如耐心有限可直接划拉至分割线后部分内容 对于其他程序的
  • 移植useradd到嵌入式Linux设备

    友情提示 前面一大段描述的是在老版本Ubuntu14 4交叉编译新版本shadow 过程曲折 没有结果 分割线后面一段是重新换了一个较老版本shadow 4 4 过程丝滑 结果喜人 诸君如耐心有限可直接划拉至分割线后部分内容 对于其他程序的
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

    背景 为了能识别出代码中抛出错误码的地址和具体的错误码值 再根据错误码文件获取到错误码的具体值和注释 方便后续的排错 这里使用AST进行语法分析获取到代码中的目标对象 一 编译过程 在开始解析代码之前先补充了解一下编译过程 编译过程是将高级
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • Cookie + Session 登入

    Cookie Session 登入 在讲Cookie Session 登入前 我们应该先来了解一下 为什么会有这两个东西 因为HTTP 是一种無狀態 stateless 的协议 所以每次请求都是獨立的 伺服器端无法判断本次请求和上一次请求是
  • java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令 JSch 是SSH2的一个纯Java实现 它允许你连接到一个sshd 服务器 使用端口转发 X11转发 文件传输等等 你可以将它的功能集成到
  • 抖音告白代码java,(新版失效)去抖音水印简单分析教程(附带java版代码)

    Python 纯文本查看 复制代码 20200908095807 https www iesdouyin com web api v2 aweme iteminfo item ids 6558232015454342407 ab type
  • 记录下今晚软件测试遇到的大题

    方法如下 测试用例设计方法之边界值分析方法 51Testing软件测试网 软件测试用例分析 习题完美整合版 搜档网 下面是选择排序的程序 其中datalist是数据表 它有两个数据成员 一是元素类型为Element的数组V 另一个是数组大小
  • 安装VS2019 提示 Visual C++ 2015-2019 x64 redistributable安装失败

    最近安装VS2019和UE4的时候总是弹出提示框 忘记截图了 找了张类似的 点击OK之后会弹出下面的对话框 度娘给出茫茫多的解决方案 大部分都是说缺少vc 2015或者vc 2017的相应库 需要先安装低版本库 试了大半天都不能解决 吐血
  • React Native-自定义组件之Slider

    一 背景 最近在进行原生模块改造RN的时候需要用到一个定制的可拖动进度条 但发现react native自带的Slider仅仅是在iOS平台上支持 所以决定自己来定制一个 二 设计思路 组合基础组件和View和Image 搭配PanResp
  • v-model数据绑定到对象的小技巧

    在前面写了v model obj a 后 下面的对象内不用写a这个属性 直接用空对象abj js这类弱语言 会自动将a这个属性set到obj的对象中去 例如 前面绑定了对象中的属性 在后面写对象的时候 可以不写对象属性 直接写一个空对象 在
  • 脑电特征中的微分熵(DE)计算

    最近参加了一个脑电相关的竞赛 其中有一个赛道是情绪识别 根据脑电数据将情绪进行4分类 查了一些文献 使用了包括时域 频域 空间域的一些特征 最后发现微分熵作为特征的分类效果最好 相关参考文献整理下载 https download csdn
  • vcruntime140.dll丢失的解决方法,vcruntime140.dll下载安装教程

    文件vcruntime140 dll需要在电脑打开一个浏览器才能下载顶部输入 dll修复程序 site 按下键盘的回车键打开 然后点击进入下载dll文件安装包 dll文件安装包下载需要点击解压 然后把解压好的文件点击打开 开始安装丢失的vc
  • android 复制文件速度,memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升

    memcpy是C C 的一个标准函数 原型void memcpy void dest const void src size t n 用于从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 neon是
  • 华为OD机试真题B卷 Java 实现【字符串分隔】,附详细解题思路

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA 真题 A卷 B卷 刷的越多 抽
  • 如何使用Blender建3D汉字(保姆级别的详细)

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于建模的学习笔记 本篇是如何使用Blender建3D汉字 这是这个专栏的第一篇 因为不知道把这篇放到哪里 就开了个新的 如何使用Blender建3D汉字 就这种的 如果是的话可以接着往下
  • 计算机科学和PYTHON编程导论_15_概率与分布

    随机程序 掷骰子 import random def rollDie 返回一个1 6的随机整数 return random choice 1 2 3 4 5 6 def rollN n result for i in range n res
  • Matlab回归分析

    线性回归 在实际中 对于情况较复杂的实际问题 因素不易化简 作用机理不详 可直接使用数据组建模 寻找简单的因果变量之间的数量关系 从而对未知的情形作预报 这样组建的模型为拟合模型 拟合模型的组建主要是处理好观测数据的误差 使用数学表达式从数
  • 用gdb.attach()在gdb下断点但没停下的情况及解决办法

    在python中 如果导入了pwntools 就可以使用里面的gdb attach io 的命令来下断点 但是这一次鼠鼠遇到了一个情况就是下了断点 但是仍然无法在断点处开始运行 奇奇怪怪 这是我的攻击脚本 我们运行一下 可以看到其实已经运行
  • Python入门--with语句

    with语句 上下文管理器 with语句可以自动管理上下文资源 不论什么原因跳出with块 都能确保文件的正确关闭 以此来达到释放资源的目的 with open 上下文管理器 with open a txt r as file as起个别名
  • Unity3d-游戏中的小地图制作

    方法一 利用NGJ MiniMap插件 1 导入该插件后 在Mesh Version gt Prefabs中 将NJG MiniMap 2D 拖入到场景中 2 在Hierarchy中点击MiniMap 位于NJG MiniMap 2D gt
  • inc si指令的作用_到底什么是链接,它起到了什么作用?

    几十年以前 计算机刚刚诞生 人们编写程序时 将所有的代码都写在同一个源文件中 经过长期的积累 程序包含了数百万行的代码 以至于人们无法维护这个程序了 于是人们开始寻找新的方法 迫切地希望将程序源代码分散到多个文件中 一个文件一个模块 以便更
  • 如何 debug (调试) maven 插件?

    用惯了 IntelliJ IDEA debug 功能 你知道如何在 IntelliJ IDEA 上调试 maven 插件吗 哈哈哈 那就是这篇文章准没错了 1 准备源码 准备你想要进行 debug 的 maven 插件的源代码 我这里以 m
  • ARM常用汇编指令

    目录 一 汇编基本语法 1 汇编指令的最典型书写模式 二 常用汇编指令 1 push压栈指令 2 pop出栈指令 3 sub指令 4 add指令 5 movs数据传输指令 6 str指令 7 ldr指令 8 bl指令 9 MOVW指令 10