win32汇编学习笔记之浮点数表示

汇编学习笔记整理之浮点数表示

鉴于之前学习代码的时候总是因为没有在课后整理笔记并且重新复习而导致知识点掌握不熟练的后果,现在将每次学习的笔记整理至csdn博客中。以便更好的督促自己学习

一、概念

汇编语言浮点数使用IEEE754 规范,有单精度 REAL4、双精度 REAL8、扩展精度 REAL10三种类型,分别用于定义 4、8、10 字节的浮点数变量(同 DWORD、QWORD、TBYTE 或 DD、DQ、DT 三种类型)。
单精度时,用 8 位表示阶码,23 位表示尾数数值;双精度时,用 11 位表示阶码,52 位
表示尾数数值;扩展精度时,用 15 位表示阶码,64 位表示尾数数值。
注:对于单、双精度,因尾数数值的整数部分固定为 1,表示成机器数时将其隐含。

公式:
浮点数真值 = 尾数 * 2移码表示的阶码-偏置值(V = (-1ms)×1.m × 2E)

数符 移码表示 原码表示
ms E m
1位 K位 n位

公式:(单精度浮点数为例)

V = m × 2E

m = (1+f)

f = n位原码2进制转化为十进制的值

E = e - (2(k-1)-1)

e = k位2进制码转化为十进制的值

k = 阶码位数

二、实例

例:机器数转浮点数
1.若单精度浮点数机器数为 1 1000 0000 110 0000 0000 0000 0000 0000B
依照上面的公式按照步骤来解:
1)判断ms
ms = 1
∴此浮点数为负

2)求m:
m = 1 + f
f = 110 0000 0000 0000 0000 0000B = 0.75
∴m = 1+0.75 = 1.75

3)求E:
E = e - (2(k-1)-1)
e = 1000 0000B = 128
k = 8
∴E = 128 - (28-1-1) = 1

4)求V = m × 2E
V = - 1.75 × 21 = -3.5

例:浮点数转机器数
将 -29.0 表示成浮点数对应的单精度机器数。即k=8,n=23,则
①.该机器数对应的尾数符号为?
②.该机器数用移码表示的阶码为?
③.用原码表示的尾数数值为?

首先分析题目:这题和上面的例题是相反的,给出一个浮点数转化为机器数。所以按照公式 V = m × 2E 我们首先需要把题目中给出的浮点数转化为科学计数法的形式,再根据公式求出机器数。

1)判断机器数的首位:题目中给出的是负数,所以ms = 1

2)将浮点数转化为机器数:因为单精度和双精度类型的整数部分都固定为1,且要转化为科学计数法的形式,由此可知:

m = V / 2E = -29.0 / 2E = 1.f
可推断出 2E = 16 = 24 => E = 4

由公式 E = e - (2(k-1)-1) 得 E = e - (2(8-1)-1) =e - 127 = 4 => e = 131
将e=131转化为二进制数得 e = 10000011

即 m = -29.0 / 16 = 1.8125 =1.f => f = 0.8125
将f = 0.8125 转化为二进制得 f = 11010000000000000000000

3)所以
①.该机器数对应的尾数符号为 1
②.该机器数用移码表示的阶码为 10000011
③.用原码表示的尾数数值为 11010000000000000000000

-----------------------------------------------------------------------------------------------------------------
以上就是浮点数和机器数相互转化的方法以及步骤,若有不正确的表达欢迎指正

你可能感兴趣的:(win32汇编学习笔记之浮点数表示)