Assembly 在汇编语言中,有没有一种方法可以只使用移位和旋转来反转数组?

Assembly 在汇编语言中,有没有一种方法可以只使用移位和旋转来反转数组?,assembly,x86,Assembly,X86,我试图找出是否有一种方法可以在汇编语言中反转数组的元素,只使用移位和旋转 比方说,我有一个字节数组,它有5个元素: 01,02,03,04,05 我希望将其转换为: 05,04,03,02,01 我知道还有其他几种方法可以做到这一点,但我只尝试使用移位和旋转。例如,你可以使用(一种静态)算法交换相邻元素,或者在单词上使用 EAX points to the first element of the BYTE array 01 02 03 04 05 ; ROL WORD PTR [EAX]

我试图找出是否有一种方法可以在汇编语言中反转数组的元素,只使用移位和旋转

比方说,我有一个字节数组,它有5个元素:

01,02,03,04,05

我希望将其转换为:

05,04,03,02,01

我知道还有其他几种方法可以做到这一点,但我只尝试使用移位和旋转。例如,你可以使用(一种静态)算法交换相邻元素,或者在单词上使用

EAX points to the first element of the BYTE array

01 02 03 04 05   ; ROL WORD PTR [EAX]  , 8   ==>
02 01 03 04 05   ; ROL WORD PTR [EAX+1], 8   ==>
02 03 01 04 05   ; ROL WORD PTR [EAX+2], 8   ==>
02 03 04 01 05   ; ROL WORD PTR [EAX+3], 8   ==>
02 03 04 05 01   ; ROL WORD PTR [EAX]  , 8   ==>
03 02 04 05 01   ; ROL WORD PTR [EAX+1], 8   ==>
03 04 02 05 01   ; ROL WORD PTR [EAX+2], 8   ==>
03 04 05 02 01   ; ROL WORD PTR [EAX]  , 8   ==>
04 03 05 02 01   ; ROL WORD PTR [EAX+1], 8   ==>
04 05 03 02 01   ; ROL WORD PTR [EAX]  , 8   ==>
05 04 03 02 01   ; ==> DONE!
我没有创建此算法的完整实现,但您应该了解这一点。

例如,您可以使用(一种静态)算法来交换相邻元素

EAX points to the first element of the BYTE array

01 02 03 04 05   ; ROL WORD PTR [EAX]  , 8   ==>
02 01 03 04 05   ; ROL WORD PTR [EAX+1], 8   ==>
02 03 01 04 05   ; ROL WORD PTR [EAX+2], 8   ==>
02 03 04 01 05   ; ROL WORD PTR [EAX+3], 8   ==>
02 03 04 05 01   ; ROL WORD PTR [EAX]  , 8   ==>
03 02 04 05 01   ; ROL WORD PTR [EAX+1], 8   ==>
03 04 02 05 01   ; ROL WORD PTR [EAX+2], 8   ==>
03 04 05 02 01   ; ROL WORD PTR [EAX]  , 8   ==>
04 03 05 02 01   ; ROL WORD PTR [EAX+1], 8   ==>
04 05 03 02 01   ; ROL WORD PTR [EAX]  , 8   ==>
05 04 03 02 01   ; ==> DONE!

我没有创建此算法的完整实现,但您应该了解它。

您喜欢使用哪种指令集?ARM、x86、SSE/AVX、MIPS。。。?顺便说一句,移位和旋转通常适用于块中的位,而不是字节、字、DWORD等位块……使用SSE指令集反转16字节的一种简单方法是.x86。是的,我习惯于使用移位和旋转。如果我不能移动数组的实际元素,有没有办法移动位来完成相同的任务?您喜欢使用哪种指令集?ARM、x86、SSE/AVX、MIPS。。。?顺便说一句,移位和旋转通常适用于块中的位,而不是字节、字、DWORD等位块……使用SSE指令集反转16字节的一种简单方法是.x86。是的,我习惯于使用移位和旋转。如果我不能移动数组的实际元素,有没有办法移动位来完成相同的任务?