嵌入式:Arm v7-M指令集架构中的字节序(大小端)

2024-09-01 14:04

本文主要是介绍嵌入式:Arm v7-M指令集架构中的字节序(大小端),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关阅读

嵌入式icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12768532.html?spm=1001.2014.3001.5482


        本文来源于博主无意之中的一个发现,虽然之前就知道Cortex-M3默认为小端模式,但是偶然发现了一些出乎意料的情况。

        首先来看看Arm v7-M指令集架构中相关的定义。

        假设存在一个地址A,则该处的规则为:

  • 一个地址为A的字,由地址A,A+1,A+2,A+3处的字节组成。
  • 一个地址为A的半字,由地址A,A+1处的字节组成。
  • 一个地址为A+2的半字,由地址A+2,A+3处的字节组成。
  • 一个地址为A的字,由地址A,A+2处的半字组成。

        然而,这并未完全指定字(word)、半字(halfword)和字节(byte)之间的映射关系。一个内存系统使用以下映射方案之一。这个选择被称为内存系统的字节序(endianness)。

小端序

        在小端字节序的内存系统中,内存中的字节与Arm通用寄存器(32位)之间的映射如图1所示。

图1 小端序映射

        在图1中,一个32位的数据的最低字节(即0到7位)保存在地址A处;次低字节(即8到15位)保存在地址A+1处;次高字节(即16到23位)保存在地址A+2处;最高字节(即24到31位)保存在地址A+3处。总结来说就是,高字节存高地址,低字节存低地址。

        同时从图2中可以看出,A既是最低字节的地址,也是低半字的地址,还是整个字的地址;A+2既是次高字节的地址,,也是高半字的地址。

图2  字,半字,字节在小端序中的地址

大端序

        在大端字节序的内存系统中,内存中的字节与Arm通用寄存器(32位)之间的映射如图3所示。

图3 大端序映射

        在图3中,一个32位的数据的最低字节(即0到7位)保存在地址A+3处;次低字节(即8到15位)保存在地址A+2处;次高字节(即16到23位)保存在地址A+1处;最高字节(即24到31位)保存在地址A处。总结来说就是,高字节存低地址,低字节存高地址。

        同时从图4中可以看出,A既是最低字节的地址,也是高半字的地址,还是整个字的地址;A+2既是次低字节的地址,也是低半字的地址。

图4  字,半字,字节在大端序中的地址

注意

        大端和小端决定了字或半字中字节的解释顺序。举个例子,从地址0x1000读取一个字(4 个字节)将会访问位于内存地址0x1000、0x1001、0x1002 和0x1003的字节,无论使用何种字节序,字节序只决定了如何将这四个字节解释为一个32位的字。

        字节序设置仅适用于数据访问,指令获取始终为小端模式。所有对系统控制空间(CSC)的访问都是小端模式。

特殊情况

        图5是一条32位的指令,而图6是其对应的存储情况。

图5 MOV指令

图6 指令的存储情况

        这似乎有些问题,按照上面的大小端序的定义。从存储情况来说,如果是小端序,这个32位指令应该被解释为0800F04F而不是F04F0800。

        这是因为对于Thumb指令而言,要求它们是16位对齐。这意味着一个32位指令被视为两个半字,高半字位hw1,低半字位hw2,但是此时hw1位于较低地址,而hw2位于较低地址,如图7所示,这看起来就像是指令只在半字层面才是小端序。

图7 指令的内存特殊小端序

这篇关于嵌入式:Arm v7-M指令集架构中的字节序(大小端)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127145

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激