在汇编代码中查找结构变量的值
Find value of struct-variable in assembly code
我正在准备今年的计算机体系结构考试,并且正在解决一些往年的考试,但是我有一个练习题我无法解决。当给出以下 C 和汇编代码时,我被要求找到 g.z 的值:
您可以在汇编代码中看到值 $0x41300000 写入了 z,但这可能是十进制的多少?我试图在 g 和 g + 4(x 和 y)的值之间找到某种模式,但我似乎找不到任何东西。
有什么想法吗?
在我看来,这就像典型的 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?
我正在准备今年的计算机体系结构考试,并且正在解决一些往年的考试,但是我有一个练习题我无法解决。当给出以下 C 和汇编代码时,我被要求找到 g.z 的值:
您可以在汇编代码中看到值 $0x41300000 写入了 z,但这可能是十进制的多少?我试图在 g 和 g + 4(x 和 y)的值之间找到某种模式,但我似乎找不到任何东西。
有什么想法吗?
在我看来,这就像典型的 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?