ARM汇编指令集——跳转指令、内存传输指令、软中断产生指令、协处理器指令、伪指令、伪操作(如何从底层直接操纵CPU)

2023-11-06

一、跳转指令

:完成程序跳转,实质就是对PC操作(赋值),b/bl跳转是短跳转,跳转范围:±32MB。
在这里插入图片描述

_start:
	 mov r0, #1
    mov r1, #2
    mov r3, #3
    b func              @; b跳转,不带返回值
     mov r4, #4

func:
    mov r5, #5
    mov r6, #6
    .end

底层现象:
在这里插入图片描述
当代码执行至第四行,直接跳转至func:
当func中代码执完毕后,直接结束,b跳转不带返回值,因素跳过代码不会被再执行!

_start:
 mov r0, #1
    mov r1, #2
    mov r3, #3
     bl func              @; bl跳转前,保存返回地址到lr
    mov r4, #4

func:
    mov r5, #5
    mov r6, #6
    mov pc, lr
    
       .end

底层现象:
在这里插入图片描述
当bl跳转前,会保存返回地址到lr。
在这里插入图片描述
之前所跳过指令也会继续执行。

二、内存传输指令

:对内存的读写操作
(1)单寄存器传输指令:ldr/str
内存地址寻址:前索引、后索引、自动索引
在这里插入图片描述

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

ARM汇编指令集——跳转指令、内存传输指令、软中断产生指令、协处理器指令、伪指令、伪操作(如何从底层直接操纵CPU) 的相关文章

  • 手臂“版本”之间的差异? (仅限 ARMv7)

    基本上我想知道ARMv7l和ARMv7之间的区别hl 我有一个带有armv7l的arm处理器 并且有很多armv7的rpmhl 我完全不知道我必须搜索什么才能获得相关信息 这个 后缀 叫什么 还有其他类型吗 他们的做法有何不同 我假设它指示
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • 如何使用 gcc 编译代码和 ARM Cortex A8 目标进行调用图分析?

    我对这个已经咬牙切齿了 我需要在 ARM 板上进行分析并需要查看调用图 我尝试使用 OProfile Kernel perf 和 Google 性能工具 一切正常 但不输出任何调用图信息 这使我得出结论 我没有正确编译代码 我在编译 C 代
  • RAM 存储二进制数和汇编语言的冒泡排序

    我必须使用 ARM v7 执行一个例程 在 RAM 内存中存储 10 个二进制数 然后使用冒泡排序对这些数字从高到低进行排序 我应该如何开始 func bubbleSortAscendingU32 ldr r3 r0 4 mov r1 9
  • GCC ARM 汇编预处理器宏

    我正在尝试使用汇编 ARM 宏进行定点乘法 define MULT a b asm volatile SMULL r2 r3 0 1 n t ADD r2 r2 0x8000 n t ADC r3 r3 0 n t MOV 0 r2 ASR
  • 在嵌入式设备上使用new或malloc引起的段错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • M1 MacBook Pro 上的 Android Studio 无法使用 ABI armeabi-v7a 模拟系统映像

    我的 M1 Macbook Pro 上的 Android Studio 可以很好地模拟 ABI arm64 v8a 的所有系统映像 API 24 29 30 31 但是 它无法使用 ABI armeabi v7a 运行所有映像 例如 API
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 为什么 GCC 交叉编译不构建“crti.o”?

    在尝试为arm构建gcc 4 x x交叉编译器时 我陷入了缺失的困境crti o文件在 BUILD DIR gcc子目录 An strace在顶层Makefile表明编译后的xgcc正在调用交联器ld with crti o 作为一个论点
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 直接在 ARM 目标上调试单声道应用程序

    我最近在 BeagleBone 嵌入式 ARM 设备上安装了 Mono 希望通过 USB 连接 Kinnect 传感器并使用 C Mono 控制它 我想知道 Mono 我正在使用 MonoDevelop 但我想这个问题也适用于 VS 是否允
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • GCC:如何在 MCU 上完全禁用堆使用?

    我有一个在基于 ARM Cortex M 的 MCU 上运行并用 C 和 C 编写的应用程序 我用gcc and g 编译它并希望完全禁用任何堆使用 在 MCU 启动文件中 堆大小已设置为 0 除此之外 我还想禁止代码中意外使用堆 换句话说
  • 直接写入 ARM Cortex A8 分支预测器中的全局历史缓冲区 (GHB) 或 BTB?

    我有兴趣直接修改 Cortex A8 上的 BTB 分支目标缓冲区 和 GHB 的内容 ARM 手册上有这样的内容 要在指令端 GHB 数组中写入一项 例如 LDR R0 0x3333AAAA MCR p15 0 R0 c15 c1 0 M
  • ARM 汇编:从 STDIN 获取字符串

    我目前正在学习 CS 课程 我们刚刚开始在 Raspberry Pi 上使用 ARM Assembly 事实证明这相当困难 想知道是否有人可以提供帮助 我当前的任务是从 stdin 获取一个字符串 使用 scanf 并计算其中的字符数 然后
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 将 C 函数与 ARM 汇编结合使用

    我见过人们在代码中使用 C 库中的 printf 的示例 如下所示 data balign 4 hello asciz Hello n text global main func main main ldr r0 hello msg bl
  • 了解带有 pc 偏移的 Cortex-M 组件 LDR

    我正在查看这段 C 代码的反汇编代码 define GPIO PORTF DATA R volatile unsigned long 0x400253FC int main void Initialization code while 1

随机推荐

  • PyTorch搭建LSTM实现时间序列预测(负荷预测)

    目录 I 前言 II 数据处理 III LSTM模型 IV 训练 V 测试 VI 源码及数据 I 前言 在上一篇文章深入理解PyTorch中LSTM的输入和输出 从input输入到Linear输出 中 我详细地解释了如何利用PyTorch来
  • qt中复制文件的功能

    1 利用qt来复制文件 首先新建个工程文件 拖入按钮 复制文件 2 需要引入的头文件如下 include
  • 六月学习记录

    六月学习记录 6 1 Android消息传递之Handler消息机制 four articles http www cnblogs com whoislcj p 5590615 html 6 2 代码审查工具phabricator 6 4
  • 7 Linux 内核移植

    一 编译 ST 的 Linux 系统 1 压缩源码 首先先下载 ST 官方源码 之前章节已经下载过了 直接输入以下命令 cd linux atk mpl stm32mp1 openstlinux 5 4 dunfell mp1 20 06
  • pycharm 2023.1.2 去掉版本控制

    pycharm 2023 1 2 去掉版本控制
  • 优秀程序员应该具备的12种能力

    1 编程语言能力 不用多说 作为合格的计算机程序员 精通一门语言是必须的 这种精通 不是说看了一本编程宝典 抄了几个程序就能说精通的 要靠长时间的积累 2 编码能力 我曾经看很多程序员写的代码 在同一个jsp或者java源文件里 出现了三种
  • WinForm控件Chart的图表类型

    将就看 后期再加目录导航2020 10 23 折线图 折线图通常使用一条线来连接一系列不同的数据点 这样的直线是直线 样条曲线或阶梯 折线图更简单 因此还可以使您可视化多个系列而不会像条形图那样重叠 以下是折线图的不同类型 折线图 折线图使
  • C\C++各种变量存放区域(代码、数据、堆、栈)

    C C 各种变量存放区域 代码 数据 堆 栈 文章目录 C C 各种变量存放区域 代码 数据 堆 栈 变量 数据 变量 数据存放区域 练习 请说明下面的指针分别指向什么位置 BSS Block Started by Symbol 区 为什么
  • numpy实现卷积两种方法

    暂时针对二维卷积 方法1 按定义计算 def numpy conv inputs myfilter h ori w ori inputs shape h k w k myfilter shape h new w new h ori h k
  • 如何控制小程序的tabBar的显示和隐藏

    1 使用wx hideTabBar 方法隐藏tabBar 2 使用wx showTabBar 方法显示tabBar 参考文档
  • 适配器模式代码示例

    package com example shipeiqi public interface ThreeElectricOutlet 用来刻画三相插座 public abstract void connectElectricCurrent p
  • maven-metadata.xml使用

    最近在开发过程中 发现工程中的一些包有问题 主要分为以下两种 1 最新包 版本号未变 只是被更新了 少了一个方法 2 jar包被更新了 但是无法更新最新的包下来 首先先确定一下更新包会导致更新哪些文件 下面都以a 1 0 1 snapsho
  • 学习笔记:机器学习之支持向量机(一、最大间隔算法)

    活动地址 CSDN21天学习挑战赛 1 简介 支持向量机也是一种二分类模型 它是通过在特征空间中建立间隔最大的分类器 这是有别于感知机模型的一点 支持向量机可分为线性可分支持向量机 线性支持向量机 非线性支持向量机 2 函数间隔 几何间隔
  • node后台快速开发框架

    任何可以用 JavaScript 来写的应用 最终都将用 JavaScript 来写 node js是用JS语言编写的 JaveScript已经是世界上最流行的语言之一 用它可以实现任何功能需求 无论是后台开发 前端 App 桌面应用程序
  • 华为OD机试 C++ 最佳植树距离

    题目 小明得到了一项任务 在一个沙地里种树 不过 有些地方不能种树 只能选特定的位置来种 为了让树之间的空间尽可能大 从而更好地防沙 你要帮小明决定每棵树应该种在哪里 举个例子 如果合适的种树地点是1 3 5 6 7 10 13 你有3棵树
  • CountDownLatch理解一:与join的区别

    首先 我们来看一个应用场景1 假设一条流水线上有三个工作者 worker0 worker1 worker2 有一个任务的完成需要他们三者协作完成 worker2可以开始这个任务的前提是worker0和worker1完成了他们的工作 而wor
  • zabbix-server无法启动

    故障现象 监控界面无数据 1 netstat lntup 先查看zabbix server进程是否正常 2 tail f var log zabbix zabbix server log 查看后台日志 表示一个子进程死掉 是一个zabbix
  • 平凯星辰合伙人余梦杰:全球化和云计算趋势下的开源生态构建

    开源是技术发展的大趋势 其开放的全球生态 敏捷的技术创新以及快速的产品迭代 都有助于企业的发展 而云的蓬勃发展则加速了企业数字化的进程 开源和云两者交融 必然会迸发更多势能 2022年7月27日 在2022开放原子全球开源峰会数据库论坛上
  • 在 IDEA 中连接数据库实现增删改查,使用dao封装数据库操作+bean封装实体类+util封装数据库连接与释放(含源码下载)

    在 IDEA 中连接数据库实现增删改查 使用dao封装数据库操作 bean封装实体类 util封装数据库连接与释放 主要内容 利用SQLyog图形化工具建立数据库 具体代码搭建 bean目录下的 用户实体类User util中对数据库的连接
  • ARM汇编指令集——跳转指令、内存传输指令、软中断产生指令、协处理器指令、伪指令、伪操作(如何从底层直接操纵CPU)

    一 跳转指令 完成程序跳转 实质就是对PC操作 赋值 b bl跳转是短跳转 跳转范围 32MB start mov r0 1 mov r1 2 mov r3 3 b func b跳转 不带返回值 mov r4 4 func mov r5 5