我对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数组。
您有什么建议我该如何解决这个问题? 先感谢您 乔治
答案 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符号后,我没有跳到正确的位置。现在程序很好地打印矩阵了!
谢谢!