Assembly MIPS快速排序程序显示异常4[指令/数据提取中的地址错误]

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

我正在学习MIPS。我试图在快速排序(无递归)上编写一个程序。 我编写了以下代码。它将要搜索的元素和数字的排序数组数作为输入,返回该数字的数组索引

.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