我有一个 [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的补码中的大正数)