我有问题再次解决我得到的这些小任务。基本上我有一个存储在一行的电路板,我需要在一行中打印10个字符然后断开,依此类推。它是一个10 x 10的电路板,因此它应该运行10次,打印10个字符行。
这样的事情:
板: .asciiz" x xx x x x x xxx x x x x x xxxx x x x xx x x xx"
为此我们得到了2个子程序,print和printlf。 print需要$ a0打印的字符串,$ a1的长度,所以我需要jal打印一旦我得到正确的字符存储在寄存器中。
我正在阅读如何在互联网上解决这个问题并进入source。
write_board:
##TODO Implement your solution here ###
sw $a1, size #I save 10 in length a1
la $t0, board #load the board on t0
add $t1, $zero, $zero #counter in t1 set to 0 for chars
add $t5, $zero, $zero #counter in t5 for the 10 loops
li $t3, 10 #10 for the division in t3
count:
lb $t2, 0($t0)
addi $t1, $t1, 1
div $t1, $t3
mfhi $t4 #the remainder of div is in t4
beq $t4, $zero, lineBreak #if its 0 then break
j count
lineBreak:
sw $t2, 0($a0) #save the first 10 chars in a0 for printing
jal print
jal print_lf
addi $t5, $t5, 1 #there needs to be 10 prints, we add 1 everytime one happens
beq $t5, $t3 endString #if its 10, the program is over
j count
endString:
jr $ra
.data
size:
.word 10
board:
.asciiz " x xx x x x x xxx x x x x x xxxx x x x xx x x xx"
这似乎不适用于QTSpim,它会出现此错误:PC = 0x004000e4时发生异常 存储区中的未对齐地址:0x00000001
任何人都可能知道这个简单任务的错误但对我来说很难。
提前致谢。