我试图找出是否有办法用汇编语言反转数组的元素,只使用移位和旋转。
让我们说,例如,我有一个包含5个元素的字节数组:
01,02,03,04,05
我希望它转变为:
05,04,03,02,01
我知道其他几种可以解决这个问题的方法,但我只是尝试使用轮班和旋转。
答案 0 :(得分:2)
例如,您可以使用ROL
或ROR
覆盖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!
我没有创建这个算法的完整实现,但你应该明白这个想法。