打印MIPS Int数组的有效方法

时间:2009-11-10 18:48:18

标签: assembly mips

我正在完成一项家庭作业,转换我们写给MIPS的C程序。我的问题是关于通用MIPS编码而不是项目特定问题。我遇到了打印输出的问题。我有一个数组和输出字符串声明如下:

array: .word 7, 2, 5, -3, 3, 6, -4, 1  
output1: .asciiz "Array: \0"

我正在尝试输出数据,所以我有以下格式:

Array: 7 2 5 -3 3 6 -4 1

我们的数组是硬编码的,我们的数组长度是预先确定的。我试图想出一个循环来有效地打印它,但是使用寄存器处理lw偏移是一个问题。
我已经提出以下代码来硬编码我的输出,但我还有另一个我需要打印的数组,这看起来好像它占用了很多空间。我的代码功能齐全,但它只是一团糟!任何人都可以给我提示清理它/重构它吗? 数组存储在$a0/$s0中,数组大小存储在$a1/$s1

la $a0, output1 # print the "Array: " string
li $v0, 4
syscall

# Huge Oversized Print Statement to print out the original Array: 
li $v0, 1 # print the array
lw $a0, 0($s0)
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
li $v0, 1
lw $a0, 4($s0)
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 8($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 12($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 16($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 20($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 24($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 28($s0)
li $v0, 1
syscall

这是一个家庭作业项目,我真的想要完全理解打印阵列的更简洁方法,我不打算抄袭。非常感谢写这个循环的提示,我不是在找人给我代码。

1 个答案:

答案 0 :(得分:3)

使用$s0增加addi而不是手动更改偏移量可能会有所帮助 - 这样您就可以使用lw 0($s0)

编辑:我想我应该补充说你正在循环中递增$s0(使用j进行循环)。