当前位置: 首页 > 知识库问答 >
问题:

将EAX复制到RAX的高位?

羊舌承颜
2023-03-14

我想知道是否有任何指令序列不使用任何其他寄存器来复制RAX的低32位到其高32位。当然,我也希望EAX完好无损。

最好也不使用任何堆栈存储器。

共有1个答案

马承
2023-03-14

我的尝试...在演示派对上(或者更有可能是在这里旅行),我对正在进行的音乐compo感到头疼,所以我放弃了用于复制31位的Imul rax,rax,imm32,并试图保存符号中的1位,然后修补中间结果,因为它有几个我没有预见到的问题。

所以我选择了退出,只复制2x16位的单词,然后以Jester的方式重新洗牌(我正准备发布XCHG al,啊的想法,就在他发布答案的时候,我发誓)。

    ; rax =                           00001234 (bytes, not hexa digits)
    ror     rax, 16                 ; 34000012
    imul    rax, rax, 0x00010001    ; 34001212
    shr     rax, 16                 ; 00340012
    imul    rax, rax, 0x00010001    ; 34341212
    ror     rax, 24                 ; 21234341
    xchg    al, ah                  ; 21234314
    ror     rax, 8                  ; 42123431
    xchg    al, ah                  ; 42123413
    rol     rax, 16                 ; 12341342
    xchg    al, ah                  ; 12341324
    ror     rax, 8                  ; 41234132
    xchg    al, ah                  ; 41234123
    rol     rax, 8                  ; 12341234

稍短的(指令计数)变体(使用rol...,8个指令,从第5个开始):

    ; eax =                           00001234 (bytes, not hexa digits)
    ror     rax, 8                  ; 40000123
    imul    rax, rax, 0x01000001    ; 40123123
    rol     rax, 16                 ; 12312340
    mov     al, ah                  ; 12312344
    rol     rax, 8                  ; 23123441
    rol     ax, 8                   ; 23123414
    rol     rax, 8                  ; 31234142
    rol     ax, 8                   ; 31234124
    rol     rax, 8                  ; 12341243
    rol     ax, 8                   ; 12341234
 类似资料:
  • 所以,我有两个问题: > 我认为这种尴尬的行为必须在某个地方记录下来,但我似乎找不到详细的解释(关于64位寄存器的32位高值是如何被清除的)。对的写入总是擦除,还是更复杂?它是否适用于所有64位寄存器,或者有一些例外? 一个非常相关的问题提到了同样的行为,但是,唉,再次没有确切的文档参考。 只是我,还是这整件事看起来真的很奇怪和不合逻辑(即eax-ax-ah-al,rax-ax-ah-al有一种行

  • eax

    ember-app-explorer A CLI tool to explore your Ember.js app folders to make better decisions for yourcode maintainability and modularity. Features View your ember app details like ember-cli version, no

  • 我用gcc9.2.0和boost 1.55。 我有两个向量: 我需要将源向量转换到目标,那应该只包含源向量的字符串元素。 可以使用boost::push_back和适配器访问它吗? 目前我有这个可工作的代码,但是应该更改它:

  • 我有一个这样的数据帧。 现在,我想将第1列中的dict扩展到如下所示的各个列。 有没有捷径可以实现这一点?

  • 我想将文件salesjan2009.csv(存储在本地文件系统中,~/input/salesjan2009.csv)复制到HDFS(Hadoop分布式文件系统)主目录中 我编写了这段代码hduser@ubuntu:/usr/local/hadoop$hdfs dfs-copyfromlocal'/home/hduser/desktop/input/salesjan2009.csv'/hdfs-pa

  • 我希望graph div的高度能够一直延伸到其父(graph容器)容器的末端,但不能超过它。我已经尝试将图形的高度设置为100%和inherit,但这两种设置都会导致图形延伸到父容器的底部边缘(我不想使用overflow:hidden)。有没有办法在图形上设置height属性,使其自动将其高度设置为正确的值? 当前代码: