MIPS 异常打印不工作

MIPS Exception Printing NOT working

MIPS 异常处理程序代码不工作:在下面的代码中,我尝试打印出导致异常的指令地址(寄存器 $14)和异常类型(寄存器 $13)。我已经用尽了所有我能想到的可能的路线。

错误信息给出:

"lw": Too few or incorrectly formatted operands. Expected: lw $t1,-100($t2)

谢谢!

  mfc0 $k0, # Coprocessor 0 register  has address of trapping instruction

    lw $a0, $k0 # address of string to print

    li $v0, 4 # Print String service

    syscall

    mfc0 $k0, # Coprocessor 0 register  has type of exception

    lw $a0, $k0 # address of string to print

    li $v0, 4 # Print String service

    syscall

而不是:

lw <regdst>,<regsrc>

做:

move <regdst>,<regsrc>

move 是一个伪操作,将 [最有可能] 生成:

addu <regdst>,<regsrc>,$zero

或者,也可以通过以下方式完成:

addiu <regdst>,<regsrc>,0

旁注:我之前写过一个完整的异常处理程序,所以请确保第一条指令是[more or less]:

move $k0,$at

而且,结尾看起来像:

move $at,$k0
eret

然后我也像普通函数一样建立一个堆栈帧[保存所有其他被更改的寄存器]并在最后从中弹出

我提到这个的原因是异常处理程序必须保存它会更改的每个寄存器并在退出时恢复原始值如果它要 return 到基本代码(例如它可能会捕获并修复溢出异常)。

这对于处理断点也是[尤其]正确的。