【发布时间】:2010-01-26 01:22:14
【问题描述】:
这个很简单,但是我还没弄明白。
这个问题是关于一个程序集 mmx,但它是纯粹的逻辑。
想象以下场景:
MM0: 04 03 02 01 04 03 02 01 <-- input
MM1: 02 02 02 02 02 02 02 02
MM2: 04 03 02 01 04 03 02 01 <-- copy of input
after pcmpgtw MM0, MM1
MM0: FF FF 00 00 FF FF 00 00 <-- words where MM0 is greater than MM1 (comparing words)
MM1: 02 02 02 02 02 02 02 02
MM2: 04 03 02 01 04 03 02 01
after pand MM0, MM2
MM0: 04 03 00 00 04 03 00 00 <-- almost there...
MM1: 02 02 02 02 02 02 02 02
MM2: 04 03 02 01 04 03 02 01
我想知道用 02 填充 MM0 的零。我想我必须在步骤 2 中反转 MM0 寄存器,将 FF 更改为 00,将 00 更改为 FF,然后执行 a 和 MM1,最后执行 a 或将两者合并。
如果我能得到:
MM3: 00 00 FF FF 00 00 FF FF
then, pand MM2, MM3
MM1: 04 03 00 00 04 03 00 00
MM2: 00 00 02 02 00 00 02 02
finally por MM0, MM1 would give me the desired outcome:
MM0: 04 03 02 02 04 03 02 02 <-- Aha!
总结一下,我怎样才能将 MM3 寄存器设为 00 00 FF FF 00 00 FF ?如何反转位,证明 MMX 寄存器中只有 AND、OR、XOR 和 NAND 指令?
非常感谢任何答案。谢谢。
【问题讨论】:
-
那么...问题是什么?看起来你已经自己回答了。
-
在我的问题中可以读到:“如果我能得到”,这意味着我还没有,我问你怎么做。
标签: assembly logic boolean mask mmx