【X86】---X86处理器大小端的数据存储验证

之前也关注过大小端的存储,可能时间久了,加之又之前的电脑抽象换成了当前的处理器寄存器的值判断,导致自己总是有点蒙圈。看Spec手册的时候,有时会无法与手册中某个Bit的值与RU/RW工具读出来的对应上。这就很尴尬了。专门花时间整理下该部分的内容:

1. 什么是大小端

先解释下什么是大小端(自行百度)

2. X86处理器用RU工具读取的值如何与Spec的描述进行Bit对应

2.1 如:下面是一个Spec中GP_LVL寄存器,另一个是RU工具读出来的。我想判断该寄存器的Bit3的值是多少,这下犯难了,大小端的不理解,让我有点混淆。

2.2 为了理清楚这个问题,专门做了下述实验

我们看Spec时1个4字节32Byte的的寄存器,通常是bit31~bit0这样来看,由高到底,那么对应到寄存器中,如何将RU读出来的四个字节的数据与这个bit31~bit0对应起来呢。

这个寄存器是一个控制GPIO电平的寄存器,32个bit控制了31个GPIO的电平,基本可以理解为,bit0对那个GPIO0,biit1对应GPIO1。

1)输出GPIO8为1为0,看哪一位置在变化

这个步骤,我通过CPU实际操作了一把。前后的数据变化为下图所示

仅有这一次的数据变化,还不够,因此我又加了GPIO3的变化,数据变化是:3F->37

因此综上两个变化,可以得到下面的对应图:即bit3对应0c的字节,bit8对应0d的字节。进而我们可以推出来

  • bit7~bit0在内存中的存储对应关系为:bit7~bit0对应低字节的位置,且字节内的bit对应关系为一一对应
  • bit15-bit8在内存中的存储对应关系为:bit15~bit8对应第二小字节的位置,且字节内的bit对应关系为一一
  • ……(以此类推)

由此就得到了如何在RU中的数据与Spec的bit对应起来的结论。

原文地址:https://www.cnblogs.com/szhb-5251/p/12032049.html

时间: 2024-10-10 07:53:45

【X86】---X86处理器大小端的数据存储验证的相关文章

判断大小端的方法(java和c++)

首先我们给出大小端的定义: 小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址. 大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址. 将0x12345678写入到以1000h开始的内存中,这里0x12346578中0x12~0x78的地址是从高到低 如果,我们的机器是小端存储的话,结果为: 数据      地址0x78        1000H0x56        1001H0x34        1002H0x12      

C语言面试篇1:判断数据大小端存储

一.前言 本节,我们将学习C语言库中数据存储方式,并通过编写代码确定当前系统的数据存储方式. 二.简介 1.大端模式 大端模式是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 2.小端模式 小端模式是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中. 3.为什么会有大小端之分? 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit.但是在C语言中除了8bit的char之外,还有

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

【转】大小端存储模式精解

计算机系统中内存是以字节为单位进行编址的,每个地址单元都唯一的对应着1个字节(8 bit).这可以应对char类型数据的存储要求,因为char类型长度刚好是1个字节,但是有些类型的长度是超过1个字节的(字符串虽然是多字节的,但它本质是由一个个char类型组成的类似数组的结构而已),比如C/C++中,short类型一般是2个字节,int类型一般4个字节等.因此这里就存在着一个如何安排多个字节数据中各字节存放顺序的问题.正是因为不同的安排顺序导致了大端存储模式和小端存储模式的存在. 1. 概述 1.

计算机存储的大小端模式解析

http://blog.csdn.net/hackbuteer1/article/details/7722667 原作者文章链接,写得很好,没必要再重新分析了,看这个就够了.一般在<计算机组成原理>,或者<微机原理>,或者<汇编语言>等课程中也会有介绍,不过没有这么详细透彻罢了.红色笔记是我的注解. --------------------------------------------------------------------------------------

堆栈方向以及大小端存储

在程序的设计中,都会涉及都堆栈的使用,其实堆栈是指堆和栈,它们是两个不同的概念,其中堆是通过用户来调用的内存空间,需要用户主动分配和释放,如果只分配而不即使释放,则可能出现内存泄漏的问题,其结果的难以估量的:栈是系统自动调用的内存空间,系统也会根据实际情况自动去释放该空间. 在平时的使用当中,我们需要注意堆栈(这里仅指栈)的增长方向,一般来说,当堆栈指针(栈顶)由高地址向低地址增长时,我们称为向下增长,:当堆栈指针(栈顶)由低地址向高地址增长时,我们称为向上增长. 在程序设计中我们还需要注意的就

大小端存储

字节的高位与低位举个例子,int a = 0x12345678 ; 那么左边12就是高位字节,右边的78就是低位字节,从左到右,由高到低,(注意,高低乃相对而言,比如56相对于78是高字节,相对于34是低字节). 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低

大端小端数据存储方式

大端:BigEndian 大端模式第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节),高字节在低地址, 低字节在高地址. 小端:LittleEndian  小端模式第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节),高字节在高地址, 低字节在低地址. egg: 从内存地址为0x0000开始有以下数据:0x1234abcd BigEndian: 低地址 --> 高地址 0x0000  0x0001  0x0002  0x0003 0x12

XAMPP 的 Linux 版 (x86 兼容处理器版)安装配置使用详细介绍,教你建好一个LAMPP站!

XAMPP 的 Linux 版 (x86 兼容处理器版) 以前被称作 LAMPP,但为了避免误解,将其重名命为 ?XAMPP 的 Linux 版?.所以,如果您在寻找 LAMPP下载.安装.配置.使用方法,您就来对地方了. 安装过程仅 4 个步骤 步骤 1:下载 只需点击下面的链接.下载最新版总是好主意.:)完整的下载列表(老版本)可在 SourceForge 找到. 详细的 XAMPP 各版本更新记录可在 发布说明 中找到. XAMPP Linux 1.8.2 107 MB Apache 2.