数据堆栈中的MIPS错误地址

时间:2018-09-19 15:12:38

标签: assembly mips qtspim

我只是从MIPS开始。我的任务如下:

计算给定的8个非负数数组中X的倍数,其中X是用户选择的2的幂的乘方,例如1,2,4,8,…。

将必要的代码写入:

a。读取用户输入值X。您可以假定X始终是2的整数,即无需检查无效的用户输入。

b。计算arrayA中X的倍数,然后在屏幕上打印结果。

对于代码中给出的这组输入,我正在尝试使输出为

2
3

但是,我遇到以下错误:“数据/堆栈中的错误地址读取:0x00000090”

我正在使用QTSpim模拟器,这是数据段信息。我可以知道0x00000090不是我要访问的数组的第一个元素的存储位置吗?该代码可能无法实现所需的输出,因为我停留在调试的这个阶段。

enter image description here

# arrayCount.asm
  .data 
arrayA: .word 11, 0, 31, 22, 9, 17, 6, 9   # arrayA has 8 values
count:  .word 999             
char: .ascii "\n"

  .text
main:
    # code to setup the variable mappings
    la $t0, 144 #map arrayA
    la $t8, 146 #map count

    # code for reading in the user value X
    li  $v0, 5
    addu $a1, $v0, -3 
    syscall

    #start printing out the stored int here 
    li  $v0, 1
    addu $a0, $a1, $zero
    syscall

    #print newline character(Assuming string)
    li  $v0, 4
    la  $a0, char
    syscall

    #to set the higher bound to do a while loop
    li  $a0, 8
    addi $t2, $zero, 0 


    # code for counting multiples of X in arrayA


loop:
    slt $t1, $t2, $a0
    beq $t1, $zero, exit

    sll $t3, $t2, 2
    add $t4, $t3, $t0
    lw $t5, 0($t4)
    and $t6, $t5, $a1

    beq $t6, $zero, skip
    addi $t8, $t8, 1

skip:
    addi $t2, $t2, 1 
    j loop    

exit:

    # code for printing result

    li  $v0, 1
    addu $a0, $t8, $zero
    syscall

    # code for terminating program
    li  $v0, 10
    syscall

0 个答案:

没有答案