ARM:从裸机到操作系统04 —— ARM数据类型

ARM数据类型
本章将简要介绍ARM基本数据类型、浮点数据类型和大/小端存储模式。

ARM数据类型

  • 1. ARM的基本数据类型
  • 2. 浮点数据类型
  • 3. 大/小端存储模式

1. ARM的基本数据类型

所有 ARMv7-A 和 ARMv7-R 处理器在内存中都支持以下数据类型:

  • 字节(byte) 8位
  • 半字(halfword) 16位
  • 字(word) 32位
  • 双字(doubleword) 64位

处理器寄存器大小为 32 位。指令集包含支持以下寄存器数据类型的指令:

  • 32 位指针
  • 无符号或有符号 32 位整数
  • 无符号 16 位或 8 位整数,以零扩展形式保存
  • 有符号的 16 位或 8 位整数,以符号扩展形式保存
  • 打包到寄存器中的两个 16 位整数
  • 四个 8 位整数打包到一个寄存器中
  • 存放在两个寄存器中的无符号或有符号 64 位整数。

  加载和存储操作可以将字节、半字或字传送到内存或从内存中传送出来。根据相应加载指令的规定,字节或半字的加载会在加载时对数据进行零扩展或符号扩展。
  指令集包括将两个或更多字载入和载出内存的载入和存储操作。软件可以使用这些指令加载和存储双字。

2. 浮点数据类型

  1. 浮点数据类型存储格式

在ARM体系中,浮点数是按照IEEE标准存储的。该标准定义了32位浮点和64位双精度浮点二进制小数。浮点二进制小数三部分组成:符号位、指数位和尾数位三部分组成。具体存储格式如下所示。

精度 符号位 指数位 尾数位 总位数
单精度32位 1 8 23 32
双精度64位 1 11 52 64

在这里插入图片描述
符号位:用0表示正,用1表示负;
指数位:指数 p + 移码的值二进制数表示;
尾数位:正规化表示的小数部分bbb…

  1. 浮点数据类型表示方法

计算机浮点数的正规化表示:

     ±1.bbbb…× 2p

其中 b 代表尾数是 0 或 1,而 p 表示的指数(p有正有负)。

移码(exponential bias):
指数 p 有正有负,给指数加上移码,就能保证结果总是一个非负数。对于有M个指数位的精度,其移码为:2M-1-1。

十进制转二进制时,整数部分采用除二取余法,小数部分采用乘二取整法。

【例】求3.14的单精度浮点数表示。
解:①将3.14转成二进制。
  整数部分 3 的二进制是11b,而小数部分0.14 的二进制是:0.0010001111010111000010[10001111…]b(方括号中表示小数点后第23位及之后)。
②将3.14二进制数正规化表示。
  3.14 的二进制代码就是:11.0010001111010111000010[10001111…]×20,那么用正规化表示就是:1.10010001111010111000010[10001111…]×21。方括号表示的就是小数点后第24位了,由于单精度浮点数尾数只有23位,所以需要舍入:由于第24 位为1, 且之后不全为0,所以需要向第23 位进 1 完成上舍入:1.10010001111010111000011×21
③移码。
  其指数是1,需要加上移码127,即128,也就是(000 1000 0000)b。它又是正数,所以符号为0。综上所述,3.14的单精度浮点数表示为:0 000-1000-0000 1001-0001-1110-1011-1000-011
  十六进制代码为:0x4048F5C3

3. 大/小端存储模式

Cortex-A7 处理器支持小端模式(Little-endian) 和大端模式(Bigendian)两种存储模式。

在小端模式中字的地址对应的是该字中最低有效字节所对应的地址。即32位数据的最高字节存储在高地址中,而其最低字节存储在低地址中。

大端模式正好相反。在大端模式中字的地址对应的是该字中最高有效字节所对应的地址。即32位数据的最高字节存储在低地址中,而其最低字节存储在高地址中。

例如,一个字型数据以十六进制格式表示为0x12345678,该数据由4个字节组成,需要占用4个连续存储单元。当将该数据存储于0x00000050 单元时,其数据在内存单元中的存储格式为:

地址 小端模式 大端模式
0x00000053 0x12 0x78
0x00000052 0x34 0x56
0x00000051 0x56 0x34
0x00000050 0x78 0x12

ARM 默认状态配置为小端模式,编译器不指定编译模式也默认是小端模式。

你可能感兴趣的:(ARM开发,arm开发)