(计算机组成原理)第二章数据的表示和运算-第二节8:数据的存储和排列

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(计算机组成原理)第二章数据的表示和运算-第二节8:数据的存储和排列相关的知识,希望对你有一定的参考价值。

一:大小端模式

在存储数据的时候,数据从低位到高位可以从左到右排列,也可以按从右到左的方式排列。因此,我们无法用最左或最右来表征数据的最高位或最低位,通常用最低有效字节( L S B LSB LSB)和最高有效字节( M S B MSB MSB)来分别表示数的低位和高位

现代计算机基本采用字节编址,即每个地址编号存放一个字节。不同类型的数据占用的字节数不同,(int和float的数据占用4个字节,double则占用8个字节等),但程序中的每个数据只给定了一个地址。假设变量i的地址为80 00H,字节01H、23H、45H、67H应该各有一个内存地址,那么地址0800H对应4字节中哪字节的地址呢?这就是字节排列顺序的问题了。

多字节数据都存放在连续的字节序列当中,根据数据中各字节在连续字节序列中的排列顺序不同,可以有两种方式:大端方式(bid endian)和小端方式(little endian)

  • 大端方式:按照最高有效字节到最低有效字节的顺序存储数据,符合人类阅读习惯
  • 小端方式:按照最低有效字节到最高有效字节的顺序存储数据

也可以这样描述

  • 大端方式:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地中;
  • 小端方式:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中

我们的计算机一般都是小端机,采用小端方式是有好处的,方便计算机处理。
例如下面机器代码

400d3: 01 05 64 94 04 08       add % eax,0x8049464
  • 4004d3:十六进制表示的地址
  • 01 05 43 0b 20 00:指令的机器代码
  • add %eax,0x8049464:指令的汇编形式,该指令的操作数是一个立即数0x8049464

执行指令时,从指令代码的后4字节取出该立即数,立即数存放的字节序列为64H,94H,04H,08H,正好与操作数的字节顺序相反,即采用的是小端方式存储,得到08049464H,去掉开头0,得到值0x8049464,在阅读小端存储方式机器代码时,注意是相反顺序,比如下面

二:内存(边界)对齐

假设存储字长为32位,可按照字节、半字节和字寻址对于机器字长为32位的计算机,数据以边界对齐方式存储,半字地址一定是2的整数倍,子地址一定是4的整数倍,这样无论所取的数据是字节、半字还是字,均可以一次取出,当存储的数据不满足上述要求时,通常填充空白字节使其符合要求,典型的以空间换时间的做法

如下

更多关于内存对齐的问题,可以移步这篇文章C语言重难点:内存对齐和位段

以上是关于(计算机组成原理)第二章数据的表示和运算-第二节8:数据的存储和排列的主要内容,如果未能解决你的问题,请参考以下文章

(计算机组成原理)第二章数据的表示和运算-第二节4:定点数的加减运算和溢出判断

(计算机组成原理)第二章数据的表示和运算-第二节6:定点数除法运算(原码/补码一位除法)

(计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位逻辑移位和循环移位)

(计算机组成原理)第二章数据的表示和运算-第二节1:定点数的表示(原码反码补码和移码)

(计算机组成原理)第二章数据的表示和运算-第二节2:原码反码补码和移码的作用

(计算机组成原理)第二章数据的表示和运算-第二节7:详解C语言中的强制类型转换