我正在使用 IDE Mars 在 R3000 MIPS 程序集中编写程序。这是我正在上的一门课。任务是编写一个函数,该函数遍历链表并删除任何值小于参数中给定整数的节点。我想我已经解决了问题,但是在测试过程中我一直遇到这个运行时异常:
开发人员:您必须使用 setStatement() 写入文本段!0x00000014
我一点也不知道是什么导致了这个错误。我试过用谷歌搜索它,但没有任何相关的东西出现。我什至不知道这是汇编代码还是 Mars IDE 的问题。真正奇怪的是,即使在相同的情况下,它似乎也不会一直出现。如果我有错误,有时我会更改代码(通常通过注释掉其中一个系统调用),运行它,如果我改回代码,它会消失并且不会回来。
这是我的函数代码。参数是链表中第一个节点的地址,以及删除节点的截止值,分别在 $a0 和 $a1 中。
.text
cleanup:
add $t0, $a0, $0 #keep the argument from being modified
la $t1, head #the address for the first node
sw $a0, head #the head points at the first word now
li $v0, 1 #DEBUG
li $t7, 0 #DEBUG
while:
lw $t2, ($t0) #get the node value
bge $t2, $a1, else #IF the node value is >= x, skip the next bit
add $a0, $t1, $0 #DEBUG
syscall #DEBUG
lw $t3, 4($t0) #get the address of the next node
sw $t3, 4($t1) #store the address of the next node to the next node address of the previous node
b ifend #skip to the end of the if statement
else:
lw $t1, ($t0) #ELSE set pointer to previous node to this node
ifend:
la $t4, 4($t0) #need to check if the end of the list is nigh
beq $t4, -1, out #exit loop at the end of the list
lw $t0, 4($t0) #set current node pointer to the next node
addi $t7, $t7, 1 #DEBUG
addi $a0, $t7, 0 #DEBUG
syscall #DEBUG
b while #and loop!
out:
.data
head:
.word 0