嵌入式学习(Day50:ARM汇编)

1.ARM的7种工作模式:

User:用户模式,非特权模式;

FIQ:快速中断模式。高优先级中断

IRQ:中断模式。低优先级中断;

Supervisor:管理员模式(特权模式)。当复位或软中断指令执行时进入这种模式;(软中断:Software Interrupt,缩写即SWI,SWI指令,即软中断指令。是一种利用软件方式模拟硬件中断的机制,用于实现从用户模式(非特权模式)切换到特权模式(通常是管理模式或异常模式),并执行特权程序的过程。(执行一些需要特权才能完成的操作,如:系统调用))

Abort:数据中止模式。当存取异常时进入这种模式;

Undef:未定义指令模式。当执行未定义指令时进入此模式;

System:系统模式。使用和User模式相同的寄存器集的特权模式

2.ARM中,通用寄存器的数量37个32位的寄存器;Cortex体系结构下有40个32位的寄存器。

                1个PC;(即:r15)

                1个CPSR;

                5个SPSR;

                30个通用寄存器;(r0-r7:称为未分组寄存器,在所有运行模式下都指向同一个物理寄存器;r8 -r12:对应2个不同的物理寄存器;r13(sp)和r14(lr));

r13/r14/r15详解:

        R13(SP)作为堆栈指针,用于管理栈的操作;R14(LR)作为链接寄存器,用于保存返回地址;R15(PC)作为程序计数器,用于存储下一条要执行的指令的地址。

        R13(SP)、R14(LR)和R15(PC)是ARM架构中非常重要的寄存器,它们在程序执行、函数调用、返回和指令执行过程中扮演着关键的角色。这些寄存器在ARM架构的处理器中都是32位的,并且在处理器执行指令和程序时发挥着不可替代的作用。

3.ARM的异常向量表;(异常处理程序的地址的集合)

                ARM的异常向量表是ARM处理器中用于处理各种异常情况的重要机制。它包含了一组异常处理程序入口地址的集合,用于处理处理器出现的各种异常情况。当异常事件发生时,处理器会跳转到相应的异常处理程序来进行处理,从而确保系统的稳定性和可靠性。

4.立即数是什么?如何判断是否为立即数?

                        立即数 = immed_8 循环右移 (2 * rotate_imm)

            4.1   ARM中的立即数是通过一个8位的常数循环右移偶数位得到的。要判断一个数是否为立即数,需要将其转换为二进制,然后尝试找到一个8位的常数和循环右移的位数,使得通过循环右移偶数位后能够得到该数。如果这样的常数和位数存在,并且循环右移的位数是偶数,那么该数就是一个有效的ARM立即数。      

        4.2判断某数是不是12位立即数,12位立即数的条件是:

     ①如果某个数的数值范围是0~255之间,那么这个数一定是立即数;

   ②把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;

     ③这个数的二进制序列的右边必须为偶数个连续的 0

        4.3循环右移:

        循环右移(Circular Right Shift)是二进制数操作中的一种位运算方式,它的核心思想是将一个二进制数的所有位向右移动指定的位数,同时将被移出的最高位(最左边的位)重新放到最低位(最右边的位)上,从而形成一个“循环”的效果。
以下是关于循环右移的详细解释:
定义
循环右移是一种二进制数的位运算,它将数值的每一位向右移动指定的位数,并将移出的最高位放回最低位,实现一个循环的移位效果。
操作过程
①确定移位位数:首先确定需要移动的位数n。
②准备数值:将要进行循环右移的二进制数准备好,假设它是一个32位的二进制数(在许多处理器中,整数通常是32位或64位)。
③执行循环右移:
        将二进制数的最低n位存储起来,因为这些位将被移出。
        将剩余的位向右移动n位,左侧空出的位用0填充(但这在循环右移中并不重要,因为这些位随后将被覆盖)。
        将之前存储的最低n位放到移动后的二进制数的最高位(即最左边)。

示例
假设我们有一个8位的二进制数10101010(十进制的170),我们将其循环右移2位。
原始二进制数:10101010
最低2位(10)被移出并存储。
剩余的位(101010)向右移动2位,变为001010(注意左侧用0填充)。
之前存储的最低2位(10)放到最高位,得到10001010。
归纳
循环右移运算具有“循环”的特点,即移出的位会被重新放到另一边,这种特性使得它在某些算法和数据处理中非常有用。例如,在数据加密、图像处理和数字信号处理等领域,循环右移运算常被用作改变数据的位模式,以增加数据的复杂性、减少存储空间或提高信号的质量。
在编程实现上,循环右移可以通过位操作和逻辑运算来完成,具体实现方式可能因处理器架构和编程语言的不同而有所差异。但总体上,循环右移是一种高效的位运算方式,可以快速地处理大量数据。

5.常用汇编指令:4个,mov,mvn,add,ldr,

        mov:传送字或字节;

        mvn:反向传送,取反指令。将一个操作数的反码(即每一位都取反),传送到目标寄存器中。

        add:加法,求和。用于将两个数求和并将结果存储在目标寄存器。

        ldr:将内存中指定地址的数据加载到目标操作数中。例如,LDR R1, [R2] 表示将地址为R2的内存中的数据加载到寄存器R1中。

6.User模式下,使用的寄存器最少;

7.为什么FIQ的服务程序地址要位于0x1C?

        FIQ(Fast Interrupt Request)是ARM架构中的一种快速中断请求,其服务程序地址位于0x1C的原因主要有以下几点:
        ①FIQ模式特性:ARM的FIQ模式提供了更多的banked寄存器(r8到r14以及SPSR),这些寄存器在FIQ模式切换时会被自动保存和恢复。相比之下,IRQ(Interrupt Request)模式就没有那么多banked寄存器,因此FIQ模式在处理中断时更加快速。
        ②中断向量表的位置:在ARM架构中,中断向量表是一个包含中断服务程序地址的表,用于在发生中断时跳转到相应的服务程序。IRQ的中断向量表地址通常位于0x18,而FIQ的中断向量表地址位于0x1C。
        ③直接执行与跳转:由于FIQ的中断向量表地址0x1C之后没有其他的中断向量表,这意味着FIQ的中断服务程序可以直接放在0x1C处,而不需要额外的跳转指令。相比之下,IRQ的中断向量表地址0x18之后还有其他的中断向量表,因此IRQ的中断服务程序通常需要通过跳转指令来执行。
        ④性能考虑:由于FIQ模式提供了更多的banked寄存器,并且在处理中断时不需要额外的跳转指令,因此FIQ中断的处理速度通常比IRQ中断更快。将FIQ的服务程序地址放在0x1C处,有助于进一步提高FIQ中断的处理效率。
综上所述,FIQ的服务程序地址位于0x1C主要是基于ARM架构的FIQ模式特性、中断向量表的位置、直接执行与跳转的性能考虑等多方面因素综合考虑的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34530.shtml

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

相关文章

【自然语言处理系列】Python 字符串操作技巧:清理、替换与合并

在编写Python程序时,字符串处理是一项常见的任务。了解如何有效地清理、修改和合并字符串对于数据预处理、文本分析和日常编程都至关重要。本文将引导您通过一系列实用的示例来掌握Python中字符串的核心操作,包括去除不需要的空格和特殊字符、替换文本中…

英语中定冠词the的用法(the用法口诀)

文章目录 口诀英语中定冠词 "the" 的用法详解定冠词 "the" 的基本用途1. 指特定的人或事物示例: 2. 已提及的人或事物示例: 3. 独一无二的事物示例: 定冠词 "the" 在地理名词中的应用1. 山脉、河流、群岛和海洋…

代码随想录算法训练营第六十五天|KM99. 岛屿数量——深搜、KM99. 岛屿数量——广搜、KM100. 岛屿的最大面积

代码随想录算法训练营第六十五天 KM99. 岛屿数量——深搜 题目链接:KM99. 岛屿数量 使用递归深度搜索,将每次遇到的岛屿上下左右记录为已经到过,如果遇到没到过的说明它上下左右不是之间遍历过的岛屿,结果计数1。最后统计计数即…

【机器学习项目实战(二)】基于朴素贝叶斯的中文垃圾短信分类

完整代码、数据集和相应的报告 链接已经放在了正文最下方, 供大家参考学习 摘要 ​ 本文探讨了中文垃圾短信分类的问题,通过收集实际数据集,运用多种机器学习算法进行分类,并对比了不同算法在垃圾短信分类任务上的性能。本研究旨在提高中文垃圾短信的识别准确率,为构建更…

java溯本求源之基础(二十五)之--ArrayList常用方法介绍

1. 介绍 1.1简介 ArrayList ArrayList 是 Java 集合框架中的一个类,位于 java.util 包中。它实现了 List 接口,提供了一个动态数组的功能。与普通数组不同,ArrayList 可以在需要时自动调整其容量,以容纳更多的元素。这使得它非常…

鸣潮基于虚幻引擎4的多平台效果和性能优化实践

《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏 文章目录 《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏Why Deferred Shading移动端高质量的TAAU渲染流程Ghost和Flicker优化,一些图像空间算法的融入动静态像素的差异处…

第三代全智能AI无人直播系统:销售变现的革新利器

随着科技的飞速发展,人工智能(AI)已经(keJ0277)逐渐渗透到我们生活的方方面面。特别是在直播销售领域,第三代全智能AI无人直播系统的出现,正成为销售变现的革新利器,引领着行业的新一轮变革。一、全智能AI无…

mysql数据库的管理

MySQL数据库管理 mysql数据文件 存放在初始化时定义的datadir 该目录下放置三种后缀文件 .frm 与表相关的元数据(meta),表结构的定义信息等。 .MYD mylSAM存储引擎专用 .MYI mylSAM存储引擎专用 MySQL语言类型 DDL(数据定义语言…

2024.06.24【读书笔记】丨生物信息学与功能基因组学(第十八章 人类疾病 第二部分)【AI测试版】

第二部分:人类遗传疾病的生物信息学方法 章节标题:【读书笔记】丨生物信息学与功能基因组学(第十八章 人类疾病 第二部分) 摘要: 第二部分聚焦于如何利用生物信息学方法来研究人类遗传疾病。随着生物信息学的发展,我们能够通过计算工具和数据库来分析蛋白质、基因和基…

App推广新突破!Xinstall无注册码方案,一键解决您的获客难题

在互联网的浪潮中,App推广与运营面临着前所未有的挑战。随着流量红利的衰退,如何高效、精准地触达用户,提升用户留存和转化率,成为每个企业都必须面对的问题。在这个关键时刻,Xinstall以其无注册码的解决方案&#xff…

使用vant4+vue3制作电商购物网站

一、前言 1.本项目基于vant4vue3构建,默认友友们已具备相关知识,如不具备,请友友们先去了解相关该概念 2.项目数据来源于开源框架 新峰商城 在此指出 3.此项目目的在于帮助友友们了解基本的用法,没有涉及太多的逻辑操作。 二、…

软件设计师笔记-系统开发和运行知识(二)

模块 构成模块(或称为组件)的四个基本要素:输入和输出、处理功能、内部数据、程序代码。 输入 (Input): 输入是模块从外部接收的数据、信号或指令。这些输入数据可以是用户通过用户界面输入的,也可以是从其他模块或系统传递过来的。输入数据的类型、格式和范围对模块的功能…

Java中的安全架构设计与实现

Java中的安全架构设计与实现 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊聊Java中的安全架构设计与实现。随着互联网技术的不断发展&#xff0c…

magisk获取root

使用magisk修补boot.img 一定是手机系统匹配的 boot.img 刷入手机的 /storage/emulated/0/Download/ adb push "E:\下载\boot.img" /storage/emulated/0/Download/ 使用 magisk 点击安装, 有Recovery 取消勾选 选择 修补一个文件, 选择手机下…

零基础CMake学习笔记

零基础CMake学习笔记 1. 名词解释make cmake Makefile CMakeLists.txt 2. CMake语法介绍2.1 常用指令2.1.1 project2.1.2 set2.1.3 message2.1.4 add_executable2.1.5 aux_source_directory2.1.6 include_directories2.1.7 add_definitions2.1.8 add_subdirectory2.1.9 add_lib…

针对AIGC检测的鲁棒性测试——常见攻击手段汇总

前言:这篇文章来总结一下针对AIGC检测的常见攻击手段,选取的研究工作均出自近5年AIGC检测相关文章。(论文被拒了需要补实验,先来看看别人怎么做的……) 2019 WIFS Detecting and Simulating Artifacts in GAN Fake Ima…

JavaScript的学习之事件的简介

目录 一、事件是什么 二、如何处理事件 一、事件是什么 定义:事件就是浏览器和用户之间的交互行为。 例如:点击按钮、鼠标移动、关闭窗口等。 二、如何处理事件 我们可以在对应的事件属性中设置一些JS行为,当事件触发的时候会将这些代码执行…

关于Pandas的数据填充

前言 在数据分析与预处理过程中,脏数据几乎不可避免,这直接影响到后续分析的准确性和可靠性。清洗数据中最常见的就是处理空值。Pandas DF的数据填充功能非常强大。本文介绍Pandas中常用的几种数据填充(也称为缺失值处理)方法&am…

35岁,是终点?还是拐点?

35岁,是终点还是拐点,取决于我们对生活和事业的态度、目标以及行动。这个年龄可以看作是一个重要的转折点,具有多重意义和可能性。 很多人在35岁时,已经在自己的职业生涯中建立了一定的基础,可能达到了管理层或专家级别…

Python量化交易学习——Part8:带有技术因子指标的多因子策略

技术面分析又称技术分析(Technical Analysis ),是股票投资分析的专业术语。技术分析研究以往价格和交易量数据,进而预测未来的价格走向。此类型分析侧重于图表与公式的构成,以捕获主要和次要的趋势,并通过估测市场周期长短,识别买入 / 卖出机会。根据您选择的时间跨度,…