0

我正在尝试实现一个小子例程,它将返回在RAR 过滤器 VM 语言内部旋转 N 个位置到左侧的单词,它与 x86 有着惊人的相似之处,并且出于所有意图和目的都可以被认为是 x86没有“扩展名”。

我试图复制的代码段(新标准化 SHA-3 标准 Keccak 的“Theta”步骤的一部分)

(((x) << (y)) | ((x) >> (64 - (y))))

看起来很简单,但是 RAR VM 使用 32 位宽的寄存器,但我需要实现的小例程可以提供 64 位值。

shl将结果“溢出”或进入另一个寄存器的最自然方法是什么,shr以便我可以重建 x << y 和 x >> 64 - y?如标题所示,我无权访问溢出标志。

注意:这是来自汇编器的一些代码示例,因此您可以看到我必须使用哪些指令。https://gist.github.com/581f7e162eebd652ee4b

4

1 回答 1

1

伪代码:

edx = hi_word
eax = lo_word
ecx = shift_count

if (ecx>32) {
   ecx-=32;
   swap eax,edx
}
simultaneously: edx = edx >> ecx | (eax << (32-ecx))
                eax = eax >> eax | (edx << (32-ecx))
于 2012-10-28T07:46:57.757 回答