GDB 用法之查看 xmm 寄存器

本文详细描述了如何使用GDB调试工具查看XMM寄存器的内容,包括单精度浮点数、双精度浮点数、整数等不同类型的数据,并展示了在不知具体数据类型时的解析过程。
摘要由CSDN通过智能技术生成

/*
 * gdb print xmm0
 */
    (gdb) p/d $xmm0
    $2 = {v4_float = {0, 13, 0, 0}, v2_double = {4489598, 0}, v16_int8 = {102, 102, 102, -74, 95, 32, 81, 65, 0, 0,
        0, 0, 0, 0, 0, 0}, v8_int16 = {26214, -18842, 8287, 16721, 0, 0, 0, 0}, v4_int32 = {-1234803098,
        1095835743, 0, 0}, v2_int64 = {4706578681033025126, 0}, uint128 = 4706578681033025126}

    (gdb) p/f $xmm0
    $3 = {v4_float = {-3.43322745e-06, 13.0704031, 0, 0}, v2_double = {4489598.8499999996, 0}, v16_int8 = {102,
        102, 102, -74, 95, 32, 81, 65, 0, 0, 0, 0, 0, 0, 0, 0}, v8_int16 = {26214, -18842, 8287, 16721, 0, 0, 0,
        0}, v4_int32 = {-3.43322745e-06, 13.0704031, 0, 0}, v2_int64 = {4489598.8499999996, 0},
      uint128 = 1.71564184048696179356e-4932}

    p/x $xmm0
    $6 = {v4_float = {0x0, 0xd, 0x0, 0x0}, v2_double = {0x44817e, 0x0}, v16_int8 = {0x66, 0x66, 0x66, 0xb6, 0x5f,
        0x20, 0x51, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x6666, 0xb666, 0x205f, 0x4151, 0x0,
        0x0, 0x0, 0x0}, v4_int32 = {0xb6666666, 0x4151205f, 0x0, 0x0}, v2_int64 = {0x4151205fb6666666, 0x0},
      uint128 = 0x4151205fb6666666}

    /* 使用gdb查看最后结果: */

    .section .data
        value1: .float 12.12, 34.89, 56.23, 78.45
        value2: .float 31.12, 57.124, 234.23, 67.246
    .section .text
    .globl _main
    _main:
        enter $0, $0

        movups value1, %xmm0
        movups value2, %xmm1
        addps %xmm0, %xmm1

        movups value2, %xmm1
        maxps %xmm0, %xmm1
        leave
        ret

    编译时加-g参数加入调试信息,调用addps后查看xmm1寄存器的结果,命令如下:

    (gdb) print $xmm1
    $1 = {v4_float = {43.2400017, 92.0139999, 290.459991, 145.695999},
      v2_double = {26419069594869.762, 1245245520236216.2}, v16_int8 = {-61, -11,
        44, 66, 43, 7, -72, 66, -31, 58, -111, 67, 45, -78, 17, 67}, v8_int16 = {
        -2621, 16940, 1835, 17080, 15073, 17297, -19923, 17169}, v4_int32 = {
        1110242755, 1119356715, 1133591265, 1125233197}, v2_int64 = {
        4807600484593235395, 4832839782622116577},
      uint128 = 0x4311b22d43913ae142b8072b422cf5c3}
    (gdb)

    调用加法指令之后,四组和都存储在xmm1寄存器中,
    gdb查看时由于不知道如何解析xmm1寄存器的内容,因为可能是单精度,也可能是双精度或者不同宽度的整数,
    所以只能按不同的解析方式全部显示,查看v4_float即四个单精度浮点数的显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值