我一直在做一些事情,但遇到了另外几个问题。首先:
ROR64 macro a, rot
; Result := (A shl (64-rot)) xor (A shr rot);
MOV EAX, 64
SUB EAX, rot
PSLLQ a, EAX
MOVQ mm6, a
PSRLQ mm6, rot
PXOR a, mm6
endm根据最后一个问题,我一直在尝试使用QWords进行此过程(我可能也会尝试使用DWords来学习)。在我使用的dev机器上,我所能访问的只有MMX指令,所以我一直在访问它。这个问题一直在处理来自"rot“的值,因为我已经确定MMX操作只能通过我从MASM32得到的错误来处理这些寄存器。但是当我尝试将"rot“和"64-rot”放入MMX寄存器时,我得到了更多的错误。我该如何解决这个问题?
此外,我将需要添加作为QWords的MMX寄存器。我在参考文献中没有看到这样做的说明。我是否需要将这些寄存器拆分到常规寄存器中,或者通过FP指令将它们推入?
发布于 2012-10-24 13:20:31
MMX用于单指令多路复用编程(它通常不用于64位操作)。
参见wikipedia ..MMX指令集的主要用途是基于压缩数据类型的概念,这意味着可以同时处理两个32位整数、四个16位整数或八个8位整数,而不是将整个寄存器用于单个64位整数。
现在,由于SSEx技术的出现,它已经过时了。对不起,规范中没有类似PADDQ (take a look PADDx)的说明。
Shift-Instruction只接受8位移位或其他MMX寄存器来保持移位量。这意味着你不能使用像eax这样的寄存器来完成这项工作。不错的尝试,但有时愿望与现实世界无关。
顺便说一句,请仔细看看你发布的宏。无论如何,我认为这似乎是不正确的。请考虑你想要做的操作顺序和你期望的结果。
因为您使用的宏会在您使用它的任何时候发出代码,所以您可以尝试(未测试):
TEST macro a, rot
; Result := (A shl (64-rot)) xor (A shr rot);
MOVQ mm6, a
PSLLQ a, 64-rot
PSRLQ mm6, rot
PXOR a, mm6
endmhttps://stackoverflow.com/questions/13042482
复制相似问题