首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intel x86-64 XSAVE/XRSTOR

Intel x86-64 XSAVE/XRSTOR
EN

Stack Overflow用户
提问于 2014-03-01 04:32:37
回答 2查看 10.3K关注 0票数 12

我是一名CS学生,使用Intelx86-64汇编语言编写代码,使用nasm编译,运行在以Ubuntu12.04为客户操作系统的酷睿i7处理器上。有谁有如何使用XSAVEXRSTOR的例子吗?我已经多次阅读英特尔架构软件开发人员手册中有关XSAVE的章节。我尝试在C++中实现xsave,然后反汇编二进制文件以了解它在做什么。当然,我已经在互联网上搜索过这些例子。任何建议都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-23 23:55:34

最后,给出这个问题的答案。感谢用户: harold,他帮我回答了这个问题。总结一下我的发现:

在.data中设置一个内存空间,并将其与64字节边界对齐。然后,您可以对该内存空间使用这些命令。如果您想使用堆栈,您应该能够以类似的方式确保堆栈是64字节对齐的,但在我看来,这种方法更容易实现这一目的。

eax: edx用于设置要保存、恢复的寄存器的标志。这个组合是64位的,并且是带有内部控制的ANDed,它知道你可以保存/恢复哪些寄存器(例如,这允许没有ymm的处理器忽略这些寄存器)我发现最简单的方法就是设置所有位并保存/恢复所有内容:

细分市场.data

代码语言:javascript
复制
align   64
regsave times 1024 dq 0

细分市场.text

代码语言:javascript
复制
mov     rdx, 0xFFFFFFFFFFFFFFFF
mov     rax, 0xFFFFFFFFFFFFFFFF
xsave   [regsave]

vzeroall

mov     rdx, 0xFFFFFFFFFFFFFFFF
mov     rax, 0xFFFFFFFFFFFFFFFF
xrstor  [regsave]
票数 10
EN

Stack Overflow用户

发布于 2014-03-07 07:05:59

xsave/xrstor/xsaveopt指令用于将处理器中的扩展状态完全保存/恢复到存储器或从存储器恢复。与fxsave/fxrstor类似,它可以保存/恢复st[0..7]xmm[0..7]mxcsr等状态。除了支持ymm[0..15]和未来的扩展(zmm[0..31])之外。保存的实际值和数据布局通过相关的cpuid叶进行枚举。一般使用的是操作系统context switchingprogrammer reference描述了如何正确使用它们。

对于一般的用户空间寄存器保存/恢复,汇编程序通常具有保存/恢复一组寄存器的功能。

例如..。

masm

代码语言:javascript
复制
foo PROC USES eax,ebx,ecx
    xor    ebx, ebx

loop:
    mov    eax, [esi + ebx*4]
    mov    [edi + ebx*4], eax
    inc    ebx
    dec    ecx

    jnz    loop

    ret

foo ENDP

yasm

代码语言:javascript
复制
%macro  mpush 1-*

  %rep  %0
        push    %1
  %rotate 1
  %endrep

%endmacro

%macro  mpop 1-*

  %rep %0
  %rotate -1
        pop     %1
  %endrep

%endmacro
代码语言:javascript
复制
foo:
    mpush  rax,rbx,rcx
    xor    rbx, rbx

loop:
    mov    rax, [rsi + rbx*8]
    mov    [rdi + rbx*8], rax
    inc    rbx
    dec    rcx

    jnz    loop

    mpop   rax,rbx,rcx
    ret

在ia-32中,有一个用于保存所有通用寄存器的pushad,但是对于amd64,您需要为您使用的每个寄存器提供相应的push/pop对。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22105247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档