在Mips程序集中打印寄存器值

时间:2015-04-26 16:46:41

标签: assembly stdout mips32

我有以下代码,我正在尝试打印一个int值:

addi    $t0, $v0, 0             # add immediate: copy returned value to $t0 by adding 0
li      $v0, 1                  # syscall 1 (print_int)
sw      $t0, 0($a0)             # store word: supply argument: recorded return value from $t0
syscall                         # syscall: print the int

但它在运行时会出错,我该如何解决?

2 个答案:

答案 0 :(得分:2)

$ a0应该包含要打印的值,而不是指向它的指针。而不是addi / sw,将$ v0分配给$ a0。我假设$ v0最初有值打印;这个问题并不明显。

同时,$ v0应该有系统调用号,在这种情况下为1。

由于您可能没有将$ a0初始化为有效的内存地址,程序会尝试写入伪造的内存位置并可预测崩溃。

答案 1 :(得分:0)

您只需在$a0中移动该值

li $t0,13

li $v0,1

move $a0,$t0

syscall