使用 4 条 ARM 指令交换一个字的两个中间字节
Swap the two middle bytes of a word using 4 ARM instructions
任务是使用不超过 4 条指令在 arm 汇编程序中编写代码,这些指令交换给定 32 位字中的两个中间字节。
例如,如果单词是 0xAABBCCDD
,则结果应该是 0xAACCBBDD
。
您最多可以使用集合 AND
、ORR
、EOR
中的 4 个手臂指令以及移位和旋转。您在 r0
寄存器中有这个词。作为提示,他们给出了以下身份 A XOR(A XOR B)=B
.
提示告诉您创建 BB XOR CC
,然后将其应用于 BB
和 CC
。这是众所周知的 XOR
交换的一个例子。像这样:
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 条指令在 arm 汇编程序中编写代码,这些指令交换给定 32 位字中的两个中间字节。
例如,如果单词是 0xAABBCCDD
,则结果应该是 0xAACCBBDD
。
您最多可以使用集合 AND
、ORR
、EOR
中的 4 个手臂指令以及移位和旋转。您在 r0
寄存器中有这个词。作为提示,他们给出了以下身份 A XOR(A XOR B)=B
.
提示告诉您创建 BB XOR CC
,然后将其应用于 BB
和 CC
。这是众所周知的 XOR
交换的一个例子。像这样:
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