【发布时间】:2014-04-02 22:51:14
【问题描述】:
当我使用print 输出 SSE 寄存器时,我得到了预期的结果:
(gdb) p $xmm0
$1 = {
v4_float = {0, 0, 0, 0},
v2_double = {0, 0},
v16_int8 = {0 <repeats 16 times>},
v8_int16 = {0, 0, 0, 0, 0, 0, 0, 0},
v4_int32 = {0, 0, 0, 0},
v2_int64 = {0, 0},
uint128 = 0
}
但是,如果我使用 info registers $xmm0 一切都是十六进制:
(gdb) i r $xmm0
xmm0 {
v4_float = {0x0, 0x0, 0x0, 0x0},
v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>},
v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0x0, 0x0, 0x0, 0x0},
v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000
}
有什么方法可以得到与print 相同的输出?
编辑:
也许是一个不相关的问题,但我如何解释 v4_float 的值?
一个例子:
(gdb) i r $xmm0
xmm0 {
v4_float = {0x1, 0x0, 0x0, 0x0},
v2_double = {0x0, 0x0},
v16_int8 = {0x0, 0x0, 0xa0, 0x3f, 0x0 <repeats 12 times>},
v8_int16 = {0x0, 0x3fa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0x3fa00000, 0x0, 0x0, 0x0},
v2_int64 = {0x3fa00000, 0x0},
uint128 = 0x0000000000000000000000003fa00000
}
v4_float[0] 和 v4_int32[0] 不应该都是 0x3fa00000 (1.25f) 吗?如果我使用print,我会正确得到v4_float = {1.25, 0, 0, 0}。那么为什么在使用info registers时是v4_float[0] = 0x1呢?
【问题讨论】:
-
尝试将
/d附加为小数 -
@FredrikPihl 我在使用
info registers时似乎无法指定格式,还是我遗漏了什么? -
好的,我刚刚发现gdb将浮点值转换为整数,然后以十六进制显示
v4_float
标签: debugging assembly gdb sse cpu-registers