2014-01-23 39 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