首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MMX -使用常量字节

MMX -使用常量字节
EN

Stack Overflow用户
提问于 2012-10-24 11:15:58
回答 1查看 481关注 0票数 1

我一直在做一些事情,但遇到了另外几个问题。首先:

代码语言:javascript
复制
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指令将它们推入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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这样的寄存器来完成这项工作。不错的尝试,但有时愿望与现实世界无关。

顺便说一句,请仔细看看你发布的宏。无论如何,我认为这似乎是不正确的。请考虑你想要做的操作顺序和你期望的结果。

因为您使用的宏会在您使用它的任何时候发出代码,所以您可以尝试(未测试):

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13042482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档