在汇编代码中查找struct-variable的值

时间:2016-05-10 17:06:22

标签: c assembly cpu-architecture

我今年正在为计算机体系结构考试做准备,而且我前几年已经完成了一些考试,但是我有一个我无法解决的练习。当给出以下C和汇编代码时,我要求找到g.z的值:

enter image description here

你可以在程序集代码中看到值$ 0x41300000写入z,但是这可能是十进制的?我试图在g和g + 4(x和y)的值之间找到一些模式,但我似乎无法找到任何东西。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

这看起来像典型的IEEE754(感谢校正)浮点数表示,在现代硬件上,浮点数通过符号位,指数的一系列位以及其余位中的内存表示。尾数(在这种情况下由IEEE规定)。

在这种情况下,z的值是十六进制0x4130 0000,它出现在11。

以下是您如何使用1.0(0x3F80 0000)的示例和低于该值的值。

0x3    F    8    0    0    0    0    0
 b0011 1111 1000 0000 0000 0000 0000 0000

 sign     = b0                               = 0         = +
 exponent = b0111 1111                       = 127 - 127 = 0
 mantissa = b000 0000 0000 0000 0000 0000    = 0   + 1   = 1
          = 1 * 2^0 = 1 * 1 = 1



0x4    1    3    0    0    0    0    0
 b0100 0001 0011 0000 0000 0000 0000 0000

 sign     = b0                               = 0          = +
 exponent = b1000 0010                       = 130  - 127 = 3
 mantissa = b011 0000 0000 0000 0000 0000    = .375 + 1   = 1.375
          = 1.375 * 2^3 = 1.375 * 8 = 11

来源:How are floating point numbers are stored in memory?