MMX - 恒字节工作(MMX - working with constant bytes)

2019-09-30 04:44发布

我一直在努力的东西,碰到另一对夫妇的问题。 第一关:

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

我一直在尝试使用每最后一个问题四字过程中(我可能会带个Dword学习尝试它,太)。 所有我有机会获得我使用的开发机上MMX指令,所以我一直去那里。 此问题已得到处理那些来自“腐”的价值观,因为我已经确定了MMX OPS仅通过我从MASM32得到了错误的登记工作。 但是,当我试图把“腐”和“64腐”到MMX寄存器中,我得到更多的错误。 我该如何解决这个问题?

此外,我将需要添加MMX寄存器为四字。 我没有看到一个指令引用做到这一点。 我将需要那些分裂成正规反正寄存器或推动他们通过浮点指令?

Answer 1:

MMX是指用于SIMD编程(它不是在一般意味着64位操作)。

见维基百科 ..“的MMX指令集的主要用途是基于打包数据类型的概念,这意味着,而不是使用整个寄存器用于单个64位整数,2个32位整数,四个16位整数,或8个8位整数可以被同时处理“。

如今,它是由于SSEX技术过时。 很抱歉,但有像PADDQ没有指令(看看PADDx )的规范。

该移位指令只接受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
endm


文章来源: MMX - working with constant bytes