2014-01-23 66 views
0

我試圖在使用MIPS的字符串數組中逐個打印字符。但它只打印系統調用。請幫助無法獲得以下MIPS彙編代碼的輸出

.text 
main: 
    la $a0, myarray 
    li $v0, 4 
    syscall 

    lbu $t0,0($a0) 
    lbu $t1,0($a0) 
    lbu $t2,0($a0) 
    lbu $t3,0($a0) 

    jr $ra 
    .data 
    myarray:.asciiz "Hello\n" 
+0

你是什麼意思,只打印「系統調用」?它打印「你好」。 –

+0

s/syscall /「系統調用的結果」? – RobertB

回答

1

這絕對可以用更簡潔的方式完成,但我希望你明白!

.data 
    myarray: .asciiz "Hello\n" 
    newline: .asciiz  "\n" 
.text 
main: 
    la $a0, myarray  #load address of original string 
    li $v0, 4    #syscall for print string 
    syscall 

    la $s1, myarray  #save base address of string 
    lb $a0, ($s1)   #load 1st char byte as arg 
    jal printchar   #print char and return 

    addi $s1, $s1, 1   #increment address to next char byte 
    lb $a0, ($s1)   #load 2nd char byte as arg 
    jal printchar   #print char and return 

    addi $s1, $s1, 1  #increment address to next char byte 
    lb $a0, ($s1)   #load 3rd char byte as arg 
    jal printchar   #print char and return 

    addi $s1, $s1, 1   #increment address to next char byte 
    lb $a0, ($s1)   #load 4th char byte as arg 
    jal printchar   #print char and return 

    addi $s1, $s1, 1   #increment address to next char byte 
    lb $a0, ($s1)   #load 5th char byte as arg 
    jal printchar   #print char and return 

    li $v0, 10   #syscall for exit 
    syscall 

printchar:    #expects that charater byte is loaded into $a0 
    li $v0, 11   #syscall for printchar 
    syscall 

    la $a0, newline  #load address of new line string 
    li $v0, 4    #syscall for print string 
    syscall 

    jr $ra    #return to main 
+0

哇,不知道格式化發生了什麼,它在預覽中看起來很棒。哦:/ –

+0

我用空格替換了標籤 - 也許這是格式問題。 (首先它看起來並不壞,所以我希望我自己沒有破壞任何東西!) – RobertB