Algorithm 使用4条ARM指令交换一个字的两个中间字节

Algorithm 使用4条ARM指令交换一个字的两个中间字节,algorithm,assembly,arm,Algorithm,Assembly,Arm,任务是在arm汇编程序中编写代码,使用不超过4条指令交换给定32位字中的两个中间字节。 例如,如果单词是0xAACCBBDD,则结果应该是0xAACCBBDD。 您最多可以使用集合和、ORR、EOR中的4条arm指令,并移动和旋转。您的单词在r0寄存器中。作为提示,他们给出了以下标识a XOR(a XOR B)=B提示告诉您创建BB XOR CC,然后将其应用于BB和CC。这是众所周知的异或交换的一个例子。大概是这样的: EOR R1, R0, R0, LSR #8 @ R1 = AA BB^A

任务是在arm汇编程序中编写代码,使用不超过4条指令交换给定32位字中的两个中间字节。 例如,如果单词是
0xAACCBBDD
,则结果应该是
0xAACCBBDD

您最多可以使用集合
ORR
EOR
中的4条arm指令,并移动和旋转。您的单词在
r0
寄存器中。作为提示,他们给出了以下标识
a XOR(a XOR B)=B

提示告诉您创建
BB XOR CC
,然后将其应用于
BB
CC
。这是众所周知的异或交换的一个例子。大概是这样的:

EOR R1, R0, R0, LSR #8 @ R1 = AA BB^AA CC^BB DD^CC
AND R1, R1, #0xff00    @ R1 = 00 00 CC^BB 00
EOR R0, R0, R1         @ R0 = AA BB BB DD
EOR R0, R0, R1, LSL #8 @ R0 = AA CC BB DD

提示告诉您创建
BB XOR CC
,然后将其应用于
BB
CC
。这是众所周知的异或交换的一个例子。大概是这样的:

EOR R1, R0, R0, LSR #8 @ R1 = AA BB^AA CC^BB DD^CC
AND R1, R1, #0xff00    @ R1 = 00 00 CC^BB 00
EOR R0, R0, R1         @ R0 = AA BB BB DD
EOR R0, R0, R1, LSL #8 @ R0 = AA CC BB DD

我不知道如何解决这个问题。这是考试中的问题之一。我需要比4:)更多的指导。stackoverflow试图远离家庭作业。。。你可以分享你的照片,然后人们可能会给出提示?只需一个暂存器,就可以轻松地在3个寄存器中完成:
ubfx
rev16
bfi
。当然,除非问题中缺少关键信息,比如ARMv7指令禁止使用……不是家庭作业,只是考试问题。我觉得很有趣。我在网上没有发现类似的问题。如果stackoverflow上不允许这样做,我可以删除它……你可以改进它。。。xor交换通常是这个,我不知道如何解决这个问题。这是考试中的问题之一。我需要比4:)更多的指导。stackoverflow试图远离家庭作业。。。你可以分享你的照片,然后人们可能会给出提示?只需一个暂存器,就可以轻松地在3个寄存器中完成:
ubfx
rev16
bfi
。当然,除非问题中缺少关键信息,比如ARMv7指令禁止使用……不是家庭作业,只是考试问题。我觉得很有趣。我在网上没有发现类似的问题。如果stackoverflow上不允许这样做,我可以删除它……你可以改进它。。。xor交换通常是这个,我是stackoverflow的新手,很抱歉我的英语不太好。我也不知道其他人可以编辑我的问题,但thaks无论如何……没问题。我只是想说得更清楚些。通常,如果您不同意编辑,可以将其回滚,或者进一步改进。不,这样做很完美-我可以让它变得不那么容易理解:)再次感谢你聪明地解决了这个问题。我是stackoverflow新手,很抱歉我的英语不太好。我也不知道其他人可以编辑我的问题,但thaks无论如何……没问题。我只是想说得更清楚些。一般来说,如果你不同意编辑,你可以将其回滚,或者进一步改进。不,这样做很完美-我可以让它变得不那么容易理解:)再次感谢你聪明地解决了这个问题。