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 到基本代码(例如它可能会捕获并修复溢出异常)。
这对于处理断点也是[尤其]正确的。
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 到基本代码(例如它可能会捕获并修复溢出异常)。
这对于处理断点也是[尤其]正确的。