1

[0,5000) の範囲の整数の配列があり、アセンブリで 5 つの間隔 ([0,1000)、[1000,2000)、...、[4000,5000)) に分割したい。私は正しいが改善の余地があるアプローチを使用しました:

sltiu $t2, $t0, 1000 ; array element in $t0, compare to 1000
;...
bne $t2, $zero, condition ; if $t0 was in the interval done

残りはこのように進みます。これにより、最悪の場合、あらゆる種類の避けられない失速を伴う 5 つのブランチが発生します。値が対象の間隔に属しているかどうかに応じて、異なるビットパターンになる配列要素にマスクを適用するアプローチを取りたいと思います。次に、ビット パターンの値を使用して.space、関連する間隔 (疑似コード) に +1 を配置する配列位置 ( で予約)にジャンプします。

daddi $v0, $zero, array_of_interval_hits
; loop
xor $t3, $t0, mask   ; $t0 contains the array element
lwu $t4,  array_of_interval_hits($t3)
daddi $t4, $t4, 1
sw $t4, array_of_interval_hits($t3)

そのようなマスクはありますか?

PS : 数値 >= 5000 または数値 < 0 の場合 (メッセージを出力して) 終了する必要があります - 符号なし算術演算を使用します 数値 >= 5000 の場合のみ気にします (負の数は 2 の補数では大きな正です)

4

2 に答える 2

0

まあ、私はそのようなマスクが存在するとは思わない -誰かが解決策を思いついたら、投稿して受け入れてください。)

于 2014-07-15T13:41:01.490 に答える