【发布时间】:2012-10-24 03:15:57
【问题描述】:
我一直在做一些事情,但遇到了另外几个问题。首先:
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 来学习)。我在使用的开发机器上只能访问 MMX 指令,所以我一直在去那里。问题一直在处理来自“rot”的值,因为我已经确定 MMX 操作只能通过我从 MASM32 得到的错误在这些寄存器上工作。但是当我尝试将“rot”和“64-rot”放入 MMX 寄存器时,我得到了更多的错误。我该如何解决这个问题?
我还需要将 MMX 寄存器添加为 QWords。我在参考资料中没有看到执行此操作的说明。我是否需要将它们拆分为常规寄存器或通过 FP 指令推送它们?
【问题讨论】:
-
“我在使用的开发机器上只能访问 MMX 指令”——哇,那一定是一台非常老旧的机器。我怀疑任何只有 MMX 的机器可以运行任何用于发布这个问题的现代浏览器。 :P 这只是人为的限制吗?
-
无论如何,我对 MMX 并不熟悉,因为它早在我的时代之前。但我认为
PSRLQ的两个操作数都需要是mm寄存器(如果您不使用恒定移位量)。所以你需要将rot从mm寄存器中移动。 -
@Mysticial 哦,你还那么年轻 :-) 总而言之,MMX 可以做 SSE1 可以做的所有事情,但没有浮点数,只有宽度的一半。
-
信不信由你,我的开发机器只支持 MMX(和 3DNow!但这是另一个我不打算涉足的问题,因为它已经完全被淘汰了)。如果它确实支持更多,我可能仍然想研究它只是为了了解它是什么。这是一个好处,在此之前,我真的不知道 MMX 或 SSE 的所谓好处是什么,尽管多年来接触过所有的营销材料。
标签: assembly x86 constants mmx