数值存储

  以补码存储

 

  十进制&二进制转换,表格法

如,123D -> 01111011B

 

 

  单精度浮点存储  

  符号位(1 Sign):0正,1负;

  指数位(8 Exponent):需要加偏置值Bias,127 + 指数值;

  尾数部分(23 Mantissa):弃小数点前那个恒1并在右端以0补全位数;

如,1234.625F -> 100 1101 0010.101 -> 1.00 1101 0010 101 * 2^10

Sign    0

Exponent   10,127+10 -> 1000 1001

Mantissa  0011 0100 1010 1000 0000 000 

0 1000 1001 0011 0100 1010 1000 0000 000 -> 449A5400

内存中小尾存储,00 54 9A 44     

 

  双精度浮点存储

  符号位(1 Sign):0正,1负;

  指数位(11 Exponent):需要加偏置值Bias,1023 + 指数值;

  尾数部分(52 Mantissa):弃小数点前那个恒1并在右端以0补全位数;

如,1234.625 -> 100 1101 0010.101 -> 1.00 1101 0010 101 * 2^10

Sign    0

Exponent   10,1023+10 -> 100 0000 1001

Mantissa  0011 0100 1010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000

0 100 0000 1001 0011 0100 1010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 -> 40934A8000000000

内存中小尾存储,00 00 00 00 80 4A 93 40

 

  浮点指令

.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive

.code

FloatCase proc

mov ebp, esp
sub esp, 5ch
push ebx
push esi
push edi
lea edi, [ebp - 5ch]
mov ecx, 17h
mov eax, 0cccccccch
rep stos dword ptr [edi]
mov dword ptr [ebp - 4], 43000000h //128.0
mov dword ptr [ebp - 8], 40800000h //4.0
mov dword ptr [ebp - 0ch], 40000000h //2.0
mov dword ptr [ebp - 10h], 42000000h //32.0
mov dword ptr [ebp - 14h], 41000000h //8.0
mov dword ptr [ebp - 18h], 0
mov dword ptr [ebp - 1ch], 42b00000h //88.0
fld dword ptr [ebp - 4] //st0 = 128.0
fmul dword ptr [ebp - 8] //st0 = 128.0 * 4.0 = 512.0
fdiv dword ptr [ebp - 0ch] //st0 = 512.0 / 2.0 = 256.0
fst dword ptr [ebp - 4] //[ebp - 4] = st0 = 256.0
fdiv dword ptr [ebp - 4] //st0 = 256.0 / 256.0 = 1.0
fmul dword ptr [ebp - 10h] //st0 = 1.0 * 32.0 = 32.0
fdiv dword ptr [ebp - 14h] //st0 = 32.0 / 8.0 = 4.0
fst dword ptr [ebp - 10h] //[ebp - 10h] = st0 =  4.0
fadd dword ptr [ebp - 1ch] //st0 = 4.0 + 88.0 = 92.0
fst dword ptr [ebp - 10h] //[ebp - 10h] = st0 = 92.0
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp

ret

FloatCase endp

start:
invoke FloatCase
ret

end start

计算出浮点值:
43000000h -> 0100 0011 0000 0000 0000 0000 0000 0000
符号:0正数
指数:1000 0110,128+6-127 -> 7
1.0 * 10^7 -> 1000 0000 -> 128.0f

40800000h -> 0100 0000 1000 0000 0000 0000 0000 0000
符号:0正数
指数:1000 0001,128+1-127 -> 2
1.0 * 10^2 -> 100 -> 4.0f

40000000h -> 0100 0000 0000 0000 0000 0000 0000 0000
符号:0正数
指数:1000 0000,128-127 -> 1
1.0 * 10^1 -> 10 -> 2.0f

42000000h -> 0100 0010 0000 0000 0000 0000 0000 0000
符号:0正数
指数:1000 0100,128+4-127 -> 5
1.0 * 10^5 -> 100000 -> 32.0f

41000000h -> 0100 0001 0000 0000 0000 0000 0000 0000
符号:0正数
指数:1000 0010,128+2-127 -> 3
1.0 * 10^3 -> 1000 -> 8.0f

42b00000h -> 0100 0010 1011 0000 0000 0000 0000 0000
符号:0正数
指数:1000 0101,128+5-127 -> 6
1.011 * 10^6 -> 1011000 -> 88.0f

st0 = 92.0

转载于:https://www.cnblogs.com/nonebutnow/p/6013165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值