Ошибки в моем коде mips, чтобы вернуть кратные X, где X 1, 2,4, 8, 16 и т. Д. - PullRequest
0 голосов
/ 17 февраля 2020
# arrayCount.asm
  .data 
arrayA: .word 11, 3, 4, 5, 6, 7 
count:  .word 6         

  .text
main:
    # code to setup the variable mappings
    la $t0, arrayA
    la $t1, count

    # code for reading in the user value X
    li $v0, 5
    move $t3, $v0
    syscall

    # code for counting multiples of X in arrayA
    addi $t4, $zero, 0 #number
start:
    beq $t1, $zero, exit

    lw $t6, 0($t0)
    and $t5, $t3, $t6
    addi, $t1, $t1, -1
    la $t0, 4($t0)
    beq $t5, $zero, update 
    j start

update:
    addi $t4, $t4, 1
    j start

    # code for printing result
exit:
    li $v0, 1
    la $a0, number
    syscall

    # code for terminating program
    li  $v0, 10
    syscall

Я получаю ошибку исключения, что не так с моим кодом? Спасибо!

1 Ответ

1 голос
/ 18 февраля 2020

Есть довольно мало ошибок

  1. Вы используете la $t1, count, который загружает адрес счета, но не его значение (6).
  2. Вы пытаетесь сохранить возврат чтения пользовательского ввода еще до того, как это произошло.
  3. Вкл. exit Вы пытаетесь загрузить символ number, но этого не существует.

Также ваш алгоритм не имеет особого смысла, но вы не слишком понимаете, какова ваша цель, поэтому я не могу это исправить.

Код с исправлениями:

# arrayCount.asm
  .data 
arrayA: .word 11, 3, 4, 5, 6, 7 
count:  .word 6         

  .text
main:
    # code to setup the variable mappings
    la $t0, arrayA
    lw $t1, count    # fix #1

    # code for reading in the user value X
    li $v0, 5
    syscall    # fix #2
    move $t3, $v0

    # code for counting multiples of X in arrayA
    addi $t4, $zero, 0 #number
start:
    beq $t1, $zero, exit

    lw $t6, 0($t0)
    and $t5, $t3, $t6
    addi, $t1, $t1, -1
    la $t0, 4($t0)
    beq $t5, $zero, update 
    j start

update:
    addi $t4, $t4, 1
    j start

    # code for printing result
exit:
    li $v0, 1
    move $a0, $t4    # fix #3
    syscall

    # code for terminating program
    li  $v0, 10
    syscall

...