Я изучаю MIPS с помощью QtSpim.В приведенном ниже коде псевдоинструкция remu расширяется и включает инструкцию прерывания.Я предполагаю, что перерыв заключается в том, чтобы перехватить деление на ноль, но в этом случае он останавливает работу кода независимо от:
.text
.globl main
main: li $s0, 113 # $s0 holds n, the number to test.
div $s1, $s0, 2 # $s1 is n / 2, the limit for the loop.
li $s2, 2 # $s2 is the counter starting at 2.
while: beq $s2, $s1, set
nop
remu $s3, $s0, $s2
beq $s3, $0, unset
nop
addiu $s2, $s2, 1
j while
nop
unset: li $s7, 0 # $s7 is unset if n isn't prime.
j end
nop
set: li $s7, 1 # $s7 is set because n is prime.
end:
Инструкция remu расширена до:
[00400040] 16400001 bne $18, $0, 4 ; 10: remu $s3, $s0, $s2
[00400044] 0000000d break
[00400048] 0212001b divu $16, $18
[0040004c] 00009810 mfhi $19
Инструкция break всегда останавливает код, даже если $ 18 ($ s2) не равен нулю.