2016-11-19 9 views
0

配列の要素をアセンブリ言語で逆にする方法があるかどうかを調べたいのですが、shiftとrotateだけを使用します。アセンブリ言語で配列を逆転させるためにシフトと回転のみを使用する方法はありますか?

には、例えば、I 5つの要素を持っているバイトの配列を持っている、と言うことができます:

01、02、03、04、05

私はそれがに変換したいです:

05、04、03、02、01

私はいくつか知っています私はこれについて行くことができる他の方法、しかし私はシフトと回転だけでそれをしようとしています。

+1

どのような命令セットを使用しますか? ARM、x86、SSE/AVX、MIPS ...? BTWのシフトと回転は、BITsによく適用され、BYTE、WORDs、DWORDsなどのBITのチャンクには適用されません。 – zx485

+1

SSE命令セットで16バイトを反転する簡単な方法の1つは['PSHUFB']です(http:// www .felixcloutier.com/x86/PSHUFB.html)。 – zx485

+0

x86。そして、はい、私はシフトとビットを使用して回転を使用することに慣れています。配列の実際の要素をシフトできない場合、ビットをシフトして同じタスクを達成する方法がありますか? – user6287161

答えて

2

ROLまたはROR以上の単語を使用して、(たとえば静的な)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! 

私はこのアルゴリズムの完全な実装を作成しませんでしたが、そのアイデアを得るべきです。

関連する問題