assembly MIPS中的sll如何使计算比直接mult和div更容易?

cx6n0qe3  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(111)

我正在努力理解SLL如何帮助我在MIPS中执行复杂的计算。
例如,how是,我必须跟踪位的位置:

sll $t1, $t0, 3    // essentially $t1 = $t0 * 8

优于(除额外作业外):

addi $t2,$zero,8
mult $t1, $t0, $t2
insrf1ej

insrf1ej1#

最大的原因很简单:移位运算比乘法运算快得多。几乎每个CPU都是如此。这是唯一“简单”的部分,使用移位运算更难写,但比multdiv更有效。即使关闭优化,大多数C编译器也会使用移位和加法,而不是硬件乘法。
但是,请记住,左移时仍有可能出现有符号溢出。如果在第一个例子中,$t0包含0x7FFFFFFF,那么在移位三次后,$1中将出现0xFFFFFFF8-8

相关问题