我想知道是否有任何指令序列不使用任何其他寄存器来复制RAX的低32位到其高32位。当然,我也希望EAX完好无损。
最好也不使用任何堆栈存储器。
我的尝试...在演示派对上(或者更有可能是在这里旅行),我对正在进行的音乐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有一种行
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属性,使其自动将其高度设置为正确的值? 当前代码: