Программа возвращает ошибку "попытка выполнить не-инструкцию в 0x00000000" - PullRequest
1 голос
/ 25 октября 2019

Мне дали HW относительно RISC-V. Задача состоит в том, чтобы решить повторяющееся уравнение T (n) = 2T (n / 2) + n, если n или input> = 2, в противном случае возвращается 1. Я пытался создать код решения, но он продолжает давать мне(ошибка) попытка выполнить не-инструкцию в 0x00000000. Может кто-нибудь подсказать, пожалуйста, где моя ошибка и как ее исправить? Спасибо за потраченное время!

Примечания: я могу только начать писать код из "Напишите свой рекурсивный код здесь ...."

.globl __start

.rodata
    msg_input: .string "Enter a number: "
    msg_result: .string "The result is: "
    newline: .string "\n"

.text

__start:
  # prints msg_input
    li a0, 4
    la a1, msg_input
    ecall
  # read from standard input
    li a0, 5
    ecall

################################################################################ 
# write your recursive code here, input is in a0, store the result(integer type) to t0
    jal findsum 
findsum:
    li t0, 2            #t0==2
    blt a0, t0, L1      #if n<2 return 1
    addi sp, sp, -8     #reserve stack area
    sw ra, 0(sp)        #save return address
    sw a0, 4(sp)        #save input 
    li t0, 2            #t0==2
    div a0, a0, t0      #n=n/2
    jal findsum         #call findsum(n/2)
                        #a1=FindSum(n/2)
    li t0, 2            #t0=2
    mul a1, t0, a1      #a1=2*FindSum(n/2)
    addi a1, a1, 2      #a1=2*FindSum(n/2)+2
    j done

L1:
    li a1, 1    

done:
    lw ra, 0(sp)
    addi sp, sp, 8
    jr ra

################################################################################

result:
  # prints msg_result
    li a0, 4
    la a1, msg_result
    ecall
  # prints the result in t0
    li a0, 1
    mv a1, t0
    ecall
  # ends the program with status code 0
    li a0, 10
    ecall  
...