Assembly MIPS快速排序程序显示异常4[指令/数据提取中的地址错误]
我正在学习MIPS。我试图在快速排序(无递归)上编写一个程序。 我编写了以下代码。它将要搜索的元素和数字的排序数组数作为输入,返回该数字的数组索引Assembly MIPS快速排序程序显示异常4[指令/数据提取中的地址错误],assembly,mips,Assembly,Mips,我正在学习MIPS。我试图在快速排序(无递归)上编写一个程序。 我编写了以下代码。它将要搜索的元素和数字的排序数组数作为输入,返回该数字的数组索引 .data .align 2 myArray: .space 4000 #1000 elements atmost prompt1: .asciiz "Enter n : " prompt2: .asciiz " " prompt3: .asciiz "\nEnter Sorted Array: " prompt4: .asci
.data
.align 2
myArray: .space 4000 #1000 elements atmost
prompt1: .asciiz "Enter n : "
prompt2: .asciiz " "
prompt3: .asciiz "\nEnter Sorted Array: "
prompt4: .asciiz "Enter number to be sorted"
.text
main:
li $v0, 4
la $a0, prompt1
syscall
li $v0, 5
syscall
move $s1, $v0, #n
addi $s0, $s1, -1
li $v0, 4
la $a0, prompt4
syscall
li $v0, 5
syscall
move $s2, $v0 #stores k , number to be searched
addi $t0, $zero, 0 #clear values in $t0
li $v0, 4
la $a0, prompt3
syscall
input:
li $v0, 5 # reading inputs
syscall
add $t1, $t0, $zero
add $t3, $v0, $zero
sll $t1, $t0, 2
sw $t3, myArray($t1)
addi $t0, $t0, 1
slt $t1, $s0, $t0
beq $t1, $zero, input
addi $t0, $zero, 0 # $t0 stores left
sll $t1, $s0, 2 #t1 stores right
add $t2, $t1, $t0
srl $t2, $t2, 1 # $t2 stores mid
BinSearch:
bge $t0, $t1 , exit
lw $t6, myArray($t2) #showing Error here
blt $t6, $s2, leftindex # if(A[mid]<k) goto left
beq $t6, $s2, found
bgt $t6, $t2, rightindex
leftindex:
addi $t0, $t2, 1 # left index leftindex= mid + 1
add $t2, $t1, $t0 # mid = left + right
srl $t2, $t2, 1 # mid/2
j BinSearch #goback to Binary Search
found:
li $v0, 1 #if(A[leftindex]==k)
addi $a0, $t0, 0 #print index of k
syscall
j exit #exit programme
rightindex:
addi $t1, $t2, -1 #rightindex = mid -1
add $t2, $t1, $t0 #mid = left+right
srl $t2, $t2, 1 #mid/2
j BinSearch #goback to binarysearch
exit:
li $v0, 10
syscall
我在代码中也提到了这一行作为注释
请告诉我我做错了什么。表示您的
$t2
值错误。单步修改代码,看看原因。我更正了。$t2是数组的索引数,我需要将它乘以4,因为在mips中每个索引4位。但它仍然不起作用。你还能发现其他错误吗?定义“不工作”,和以前一样,单步执行你的代码,看看它在哪里停止工作。
lw $t6, myArray($t2)
blt $t6, $s2, leftindex