我有这段代码:
addi $t1, $zero, $zero
LOOP: lw $s1,0($s0)
add $s2, $s2, $s1
addi $s0, $s0, 4
addi $t1, $t1, 1
slti $t2, $t1, 100
bne $t2, $s0, LOOP
问题是执行的指令总数是多少。
假设s0 = 0
我认为当t2 == s0时循环终止 t2对于任何t1 <100而言是1,并且s0在每个周期中增加4。那么这会使循环无限吗?
答案 0 :(得分:1)
我认为当t2 == s0时循环终止。
正确。
t2对于任何t1 <100。
正确。
s0在每个循环中增加4。
正确。
那么这会使循环无限吗?
不一定。
如果lw $s1,0($s0)
尝试访问受保护的内存,则操作系统将终止您的程序。
此外,如果任何添加指令导致溢出,您的程序可能也会被操作系统终止。只有无符号的添加指令(addu
等)不会产生异常/陷阱。