2017-05-25 175 views
1

我有一個MIPS程序集中的程序,它應該在我的消息中交換一個字符。Mips程序不打印任何東西

如果字符是'a',它會被字符'b'交換。

所以我有:「霍拉」,它必須打印「hollb」。

有我有什麼:

.data 
string: .asciiz "holla" 
a: .ascii "a" 
a1: .ascii "b" 
tam: .word 5 

.text 

main: 
lw $t6, tam #string length 
lb $t1, string($t0) #read bit by bit 

lb $s0, a #save in register the char that we want to search 
lb $s1, a1 #save in register the char that we want to replace 

beq $t0, $t6, done 

beq $t1, $s0, continua #if the char of (bit by bit) its like the char of chars, swap it 
bne $t1, $s0, store #if not, saves 

continua: 
sb $s1, string($t0) #do the swap 
addi $t0, $t0, 1 #+1 in the index 
j main 

store: 
    sb $t1, string($t0) #saves 
    addi $t0, $t0, 1 #+1 in the index 
    j main 
done: 
    li $v0, 4 
    li $v0, 10 
    syscall 

但代碼犯規打印我在火星什麼。

+2

爲什麼_would_它會打印任何東西?您執行的唯一系統調用是10(即'退出')。另外,你正在假設你可能不應該做的'$ t0'的初始值。在使用它們的值之前初始化所有寄存器。 – Michael

回答

0

您可能已經寫過li $v0, 4,但這在MIPS的打印工作中無法說明。下面是它應該如何一直:

li $v0, 4 #to print a string la $a0, string #load string's address syscall

然後li $v0, 10 syscall,終止程序。