如何通过编译器解释浮点数和双精度数并最终在内存中表示?

时间:2018-04-23 22:42:53

标签: c assembly memory architecture

例如:C中浮点数的简单定义, 浮动x = 1.375

我们如何在汇编中编写它以及如何映射到数据存储器?

对浮点数进行操作并将值存储在内存中(在PIC程序集中)的示例,以便了解我们如何在更接近硬件的级别上处理浮点数。

1 个答案:

答案 0 :(得分:1)

浮点表示的核心思想是,x编号为m*b^e,其中m尾数或小数部分,{ {1}}是基础b指数

e.g。

e

IEEE-754浮点标准

IEEE-754浮点标准是用于表示和操纵所有现代计算机系统所遵循的浮点数量的标准。它定义了浮点数的几个标准表示,所有这些表示都具有以下基本模式(此处的具体布局适用于32位浮点数):

enter image description here

位数从最低有效位开始计数。 第一位是符号(0表示正数,1表示负数)。 跟随8位是超过127二进制表示法的指数;这意味着二进制模式0.375 = 1.5*(2^(-2)) 表示指数0,01111111 = 127,表示1,1000000 = 128表示-1,依此类推。 尾数适合剩余的24位,其前导1被剥离,如上所述。

某些数字有特殊表示。因为0不能以标准形式表示(小数点前没有1),所以给出了特殊表示01111110 = 126。 (还有一个0 00000000 00000000000000000000000,看起来等于+0,但打印方式不同。)带有-0 = 1 00000000 00000000000000000000000指数的数字代表非数字数量,例如不是数字({ {1}}),由(0.0 / 0.0)和正或负无穷大等操作返回。

示例:

11111111 = 255 = 2128

对于 64位双,指数和尾数的大小都更大:

  • 已签署 - 1
  • exponent - 11
  • 尾数 - 52

英特尔处理器内部使用更大的80位浮点格式进行所有操作:

  • 已签署 - 1
  • exponent - 15
  • 尾数 - 64

<强> SOURCE