我似乎真的在使用mips,我已经阅读了多篇有关如何制作数组并访问它们的教程,但每当我尝试执行所列出的方法时,我的程序什么都不做。
目前我有这段代码:
.data
array: .word 1:32 # array of 32 integers
line: .asciiz "\n"
main:
li $t0, 0 # $t0 is the loop induction variable
li $t1, 32 # $t1 is the sentinal value for the loop
la $t2, array # $9 starts as the base address of the array
# and is the address of each element
li $t3, 1 # $12 is the value 18, to be put in desired element
for:
bge $t0, $t1, end_for
sw $t3, ($t2)
li $v0, 4
la $a0, line
syscall
li $v0, 1
move $a0, t3
syscall
add $t2, $t2, 4 # get address of next array element
add $t0, $0, 1 # increment loop induction variable
b valfor
valfor:
addi $t3, $t3, 1
b for
end_for:
li $v0, 10
syscall
尝试运行时,我的代码会立即完成。它没有列出任何错误或做任何有趣的事情,它只是说-- program is finished running (dropped off bottom) --
如果有人能指出我正确的方向,就创建,访问和打印整数数组而言,我会非常感激。
网站我认为我准确地解释了我的代码: http://pages.cs.wisc.edu/~cs354-2/onyourown/arrays.html http://courses.cs.vt.edu/~cs2505/fall2010/Notes/pdf/T23.MIPSArrays.pdf
答案 0 :(得分:0)
您是否真的试图运行您在问题中输入的代码?它包含行move $a0, t3
,由于缺少$
符号(t3
应为$t3
)而无法在SPIM中汇编。
除此之外,我发现您的代码至少存在两个问题:
由于这一行,你有一个无限循环:
add $t0, $0, 1 # increment loop induction variable
那只是$t0 = 1
。它应该更改为add $t0, $t0, 1
。
另一个问题是您已将代码放入数据部分。代码应该在文本部分,即在您main:
之前:
.text
.globl main