【问题标题】:Printing register value in Mips assembly在 Mips 程序集中打印寄存器值
【发布时间】:2015-04-26 16:46:41
【问题描述】:

我有以下代码,我正在尝试打印一个 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

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

【问题讨论】:

  • 您忘记提及错误和位置,以及您要打印的寄存器。我猜你没有正确设置$a0,但无论如何打印都不需要。

标签: assembly stdout mips32


【解决方案1】:

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

同时,$v0 应该有系统调用号,在本例中为 1。

由于您可能没有将 $a0 初始化为有效的内存地址,因此程序会尝试写入虚假的内存位置,并且可以预见会崩溃。

【讨论】:

    【解决方案2】:

    你可以在$a0中移动那个值

    li $t0,13
    
    li $v0,1
    
    move $a0,$t0
    
    syscall
    

    【讨论】:

    • 给出一些解释你做了什么以及错误的原因是什么。使用 3 个反引号 ``` 显示代码,使用单个 ` 表示内联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2011-02-12
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多