Mips32打印存储在堆栈中的字符串

时间:2017-11-14 20:16:21

标签: mips code-generation

我按下堆栈上的每个字符,然后调用print_s函数: 输出 h 而不是 hel

sub $sp, $sp, 4
li $t9, 'h'
sb $t9, 0($sp)
li $t9, 'e'
sb $t9, -1($sp)
li $t9, 'l'
sb $t9, -2($sp)
li $t9, 0      #tried $zero, '0' '\0'
sb $t9, -3($sp)
la $a0, 0($sp)
jal print_s
#code that exits here.
print_s:
    li $v0, 4
    syscall
    jr $ra

为什么它不打印字符串的任何想法?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

这段代码不起作用的原因是因为堆栈向下增长(例如地址从高到低。正确的方法是以相反的顺序存储字符串:

sub $sp, $sp, 4
li $t9, '\0'
sb $t9, 0($sp)
li $t9, 'l'
sb $t9, -1($sp)
li $t9, 'e'
sb $t9, -2($sp)
li $t9, 'h'
sb $t9, -3($sp)
la $a0, -3($sp)
jal print_s
#code that exits here.
print_s:
    li $v0, 4
    syscall
    jr $ra