代码之家  ›  专栏  ›  技术社区  ›  The amateur programmer

x86-64从堆栈段故障中存储和删除浮点值

  •  0
  • The amateur programmer  · 技术社区  · 4 年前

    所以我想我应该制作一些简单的帮助函数来在堆栈和 XMM 注册,但我又在分离。怎么做才是正确的?下面是我当前的故障代码:

    pushxmm0:
        SUB RSP, 8;Move the stack
        MOVSD QWORD [RSP], XMM0
        RET
    
    popxmm0:
        MOVSD XMM0, QWORD [RSP]
        ADD RSP, 8;Move the stack
        RET
    
    main:
        ;Do stuff here
        CALL pushxmm0
        ;Do more stuff
        CALL popxmm0 ;Restore the register value (segfault)
    

    编辑:这和函数调用有关系吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Employed Russian    4 年前

    在执行的第一条指令之前 pushxmm0 例行程序,堆栈如下所示:

    ... used stack ...
    RA      # return address in main, pointing to "CALL popxmm0"
            <--- RSP points here
    ... unused stack ...
    

    现在我们执行 SUB MOVSD

    ... used stack ...
    RA
    copy of XMM0
                  <--- RSP points here
    ... unused stack ...
    

    问:下一个在哪里 RET 指令返回?