MIPS 2D阵列打印为矩阵

时间:2014-12-26 17:13:51

标签: assembly mips multidimensional-array

我对MIPS汇编中的数组有疑问。 我的2D阵列由大的​​1D阵列表示(例如,2x2阵列只是具有4个“单元”的1D阵列)。

但是,当我尝试将2D数组打印为矩阵时,我遇到了问题。我的意思是,如果我有阵列:3x3的数字1 2 3 4 5 6 7 8 9我想在3条单独的线上打印它,每条线上有3个整数,而不是在一条线上或9条线上。< / p>

`
add $t3,$0,$0 # t3 = counter
la $s1,tableau #s1 = addresse of the begining of the array
AFFICHE_MAT:    
beq $t3,$t2, FIN #t3 = counter, t2 = total number of elements for the matrix
beq $t3,$t1 NEW_LINE #if we are at the end of a line, we'd like to print \n
lw $a0,($s1) #print the next number of the 2D array
addi $v0,$0,1
syscall
la $a0,intervalle #we print ' ' between all numbers
addi $v0,$0,4
syscall
addi $s1,$s1,4
addi $t3,$t3,1
j AFFICHE_MAT

NEW_LINE: la $a0,NL addi $v0,$0,4 syscall j AFFICHE_MAT FIN: addi $v0,$0,10 syscall

问题在于,当我进行测试时,我是否在一行

beq $t3,$t1 NEW_LINE #if we are at the end of a line, we'd like to print \n

我跳转到NEW_LINE,然后从NEW_LINE跳转到AFFICHE_MAT NEW_LINE: la $a0,NL addi $v0,$0,4 syscall j AFFICHE_MAT

但是在AFFICHE_MAT中我失去了计数器的价值。

如果我不测试我是否在一行的末尾,我会在一行上打印整个2D数组。

您有什么建议我该如何解决这个问题? 先感谢您 乔治

2 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是,在打印换行后,您将返回测试是否应该打印换行的部分,这将再次成为现实,因此您可以打印无限数量的换行符。

您可以通过跳回之后的指令来修复它,检查是否必须打印换行符。

这会添加标签AFTER_NEW_LINE

AFFICHE_MAT:    
  beq $t3,$t2, FIN #t3 = counter, t2 = total number of elements for the matrix
  beq $t3,$t1 NEW_LINE #if we are at the end of a line, we'd like to print \n
AFTER_NEW_LINE:
  lw $a0,($s1) #print the next number of the 2D array

并在NEW_LINE子程序中使用

更改j AFFICHE_MAT
  j AFTER_NEW_LINE

答案 1 :(得分:0)

是的,这就是问题所在。打印\ n符号后,我没有跳到正确的位置。现在程序很好地打印矩阵了!

谢谢!