首页 > 检查数组下标是否越界的低开销办法
头像
王虾片
编辑于 2021-01-08 22:19
+ 关注

检查数组下标是否越界的低开销办法

将有符号数作为无符号数来处理,是一种检验 0 ≤ x ≤ y 的低开销方法,常用于检查数组的下标是否越界。

下面这条指令的含义是,将 $s1 和 $t2 作为无符号数来处理,如果 $s1 < $t2,则将 $t0 的值置为 1,否则保持初始值 0 不变。

sltu $t0, $s1, $t2

($t0、$s1、$t2 分别代表 3 个不同的寄存器,在这里姑且把他们当做变量来看待)

因为 $t2 是数组的长度,所以一定是正整数,最高位是 0(因为是补码表示),如果 $s1 是负数,那么它的最高位一定是 1 (同样是因为补码),那么把 $s1 作为无符号数一定比 $t2 大,所以上述指令执行之后 $t0 为 0;如果 $s1 中存的是比 $t2 大的正整数,那上述指令的执行结果肯定也是 $t0 = 0。

所以使用无符号比较 x < y,只用一条指令,就可以实现在检查 x 是否小于 y 的同时,也检查 x 是否为一个负数。

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐