MIPS运行时错误“;无法直接从文本段“中读取”;

MIPS运行时错误“;无法直接从文本段“中读取”;,mips,runtimeexception,Mips,Runtimeexception,问题中给出了从jal next开始的代码块,因此它不能更改(必须在每条指令后给出中间内存和寄存器状态)。程序在错误行终止,mesage运行时异常为0x00400054:无法直接从文本段读取!0x00400074'我认为该行应该将内存位置x200040054的值加载到$t0。我尝试手动输入内存和寄存器值,删除第一个代码块,以便在执行有错误的行时获得不同的程序计数,但得到相同的错误 .text li $t2, 0x0012b628 li $t3, 0x01234567 li $t4, 0xfedc

问题中给出了从jal next开始的代码块,因此它不能更改(必须在每条指令后给出中间内存和寄存器状态)。程序在错误行终止,mesage运行时异常为0x00400054:无法直接从文本段读取!0x00400074'我认为该行应该将内存位置x200040054的值加载到$t0。我尝试手动输入内存和寄存器值,删除第一个代码块,以便在执行有错误的行时获得不同的程序计数,但得到相同的错误

.text 
li $t2, 0x0012b628
li $t3, 0x01234567
li $t4, 0xfedcba98
li $t5, 0xf0f0f0f0
sw $t2, 0x10000000
sw $t3, 0x10000004
sw $t5, 0x1000000C
li $a0, 0x000007de
li $t0, 0x52f123d6
li $t1, 0xffffffff 
li $s0, 0x10000000

        jal next
next :  lw $t0 , 0x20($31)  #line with error
        andi $t1 , $t0 , 0x07C0
        xor $t0 , $t0 , $t1
        lw $t1 , 0($s0)
        andi $t1 , $t1 , 0x07C0
        or $t0 , $t0 , $t1
        srl $t1 , $t1 , 6
        sw $t0 , 0x20($ra)
        sll $a0 , $a0 , 31


li $v0, 10
syscall

您将获得运行时异常,因为您正在运行的代码正在尝试读取和写入文本段(保存程序代码的内存),通常您无法在运行时读取/写入这些内存部分

出现异常的代码行试图将指令内容放入寄存器
$t0
中,该指令位于
$ra
前面的8条指令,此时应指向指令位置
lw$t0,0x20($31)#有错误的行
,这是指令的二进制表示形式
sll$a0,$a0,31

然后,在一些位操作之后,它尝试用其他指令更改指令
sll$a0,$a0,31
,显然是用
sll$a0,$a0,24