Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops MIPS代码已损坏_Loops_Assembly_Mips - Fatal编程技术网

Loops MIPS代码已损坏

Loops MIPS代码已损坏,loops,assembly,mips,Loops,Assembly,Mips,我正在为我的计算机组织课程编写一些MIPS代码,但我似乎无法使MIPS正常工作,而且联机的MIPS资源也不多。我正在PCSPIM上运行代码。代码应该将10添加到array2的内容中,并将其存储在array1中,然后打印array1。修改后的代码现在可以正常工作了 .text main: la $t0, array1 la $t1, array2 la $s0, valuec li $s2, 6 add $t6, $zero, 1 #i = 1 Loop:

我正在为我的计算机组织课程编写一些MIPS代码,但我似乎无法使MIPS正常工作,而且联机的MIPS资源也不多。我正在PCSPIM上运行代码。代码应该将10添加到array2的内容中,并将其存储在array1中,然后打印array1。修改后的代码现在可以正常工作了

.text
main:
    la $t0, array1
    la $t1, array2
    la $s0, valuec
    li $s2, 6
    add $t6, $zero, 1 #i = 1

Loop:
    addi $t6, $t6, 1 #i++

    lw  $t2, ($t0)
    lw  $t5, ($t1)
    lw  $s1, ($s0)
    addu $t2, $t5, $s1
    sw  $t2, ($t0)
    add $t0, $t0, 4
    add $t1, $t1, 4
    li $v0, 1
    move $a0, $t2
    syscall
    blt $t6, $s2, Loop

    li $v0, 10
    syscall
.data
    array1: .space 20
    array2: .word 1,2,3,5,9
    valuec: .word 10

PCSPIM打印0 5次并返回异常7[Bad data Address]发生并被忽略

可能存在许多问题,但最明显/最有可能的是,您没有在数据节开始之前从main返回

jr ra

这是家庭作业,所以我现在只想给你们一些线索,并在你们开始的时候补充。有几件事:

1/你需要告诉我们它应该做什么。这是最重要的

2/将数组1地址存储到t0中,然后在第一个循环中重用t0

3/您似乎对地址和这些地址的内容感到困惑(
“la$s0,valuec”
“addu$t0,$t1,$s0”

更新:

事实上,我必须暂时退出,所以我会发布我的解决方案,以免让你陷入困境

我之前提到的混淆是,您正在将两个地址加载到$t1和$s0中,然后将它们相加以获得另一个地址—这可能远远超出了您的数据区域(您应该添加一个地址和偏移量)

这基本上就是您的代码的问题(打印零和崩溃)。你最好的办法是修复这个问题,并参考我下面的代码,作为最后的手段,看看我会怎么做。从长远来看,复制代码对你没有帮助,你最好假设你的教育者也在检查所有网站是否存在剽窃行为

这是我编写的代码(很快,所以您需要测试它-它可能有bug)。我建议你仔细阅读评论,了解它在做什么

我几小时后回来看看你怎么样。干杯

.text
main:

# Initialization of array pointers and loop

    la      $t0, array1       # address of array 1
    la      $t1, array2       # address of array 2
    li      $t2, 1            # element number
    li      $t3, 6            # upper limit of elements

# Process each word in array 2, adding 10 and placing
# into array 1.

Loop:
    lw      $t3, 0($t1)       # get word from array 2
    addi    $t3, $t3, 10      # add 10 to word
    sw      $t3, 0($t0)       # store word into array 1
    addi    $t0, $t0, 4       # move to next entry in array 1 and 2
    addi    $t1, $t1, 4
    addi    $t2, $t2, 1       # increment element number
    blt     $t2, $t3, Loop    # loop until all elements done

# Initialize printing loop by going back to start of array 1

    la      $t0, array1       # address of array 1
    li      $t2, 1            # element number

# Loop through array 1, printing each element.

pLoop:  
    lw      $t2, 0($t0)       # get word from array 1
    li      $v0, 1            # 'print' command code
    move    $a0, $t2          # needs value in $a0
    syscall                   # print it
    addi    $t0, $t0, 4       # move to next entry in array 1
    addi    $t2, $t2, 1       # increment element number
    blt     $t2, $t3, Loop    # loop until all elements done

    li      $v0, 10           # 'terminate' command code
    syscall                   # exit

# Data arrays for array 1 and 2

.data
array1: .word 0,0,0,0,0
array2: .word 1,2,3,4,5

我认为这是由命令代码$v0设置为10的最后一个系统调用处理的。