(计算机组成原理)第二章数据的表示和运算-第二节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:定点数的表示(原码反码补码和移码)