我有以下代码,我正在尝试打印一个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
但它在运行时会出错,我该如何解决?
答案 0 :(得分:2)
$ a0应该包含要打印的值,而不是指向它的指针。而不是addi / sw,将$ v0分配给$ a0。我假设$ v0最初有值打印;这个问题并不明显。
同时,$ v0应该有系统调用号,在这种情况下为1。
由于您可能没有将$ a0初始化为有效的内存地址,程序会尝试写入伪造的内存位置并可预测崩溃。
答案 1 :(得分:0)
您只需在$a0
中移动该值
li $t0,13
li $v0,1
move $a0,$t0
syscall