有没有办法只使用移位和旋转来反转汇编语言中的数组?

时间:2016-11-19 16:51:48

标签: assembly x86

我试图找出是否有办法用汇编语言反转数组的元素,只使用移位和旋转。

让我们说,例如,我有一个包含5个元素的字节数组:

  

01,02,03,04,05

我希望它转变为:

  

05,04,03,02,01

我知道其他几种可以解决这个问题的方法,但我只是尝试使用轮班和旋转。

1 个答案:

答案 0 :(得分:2)

例如,您可以使用ROLROR覆盖WORD,并使用(某种静态)BubbleSort算法交换相邻元素。

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!

我没有创建这个算法的完整实现,但你应该明白这个想法。