инструкция remu расширена и теперь включает инструкцию break - ВСЕГДА останавливает программу - PullRequest
0 голосов
/ 08 ноября 2018

Я изучаю 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) не равен нулю.

...