My assembler code has this error: "invalid program counter value: 0x00000000 Go: execution terminated with errors"

1
.data
    prompt2: .asciiz "please enter the elements one by one:"
    prompt3: .asciiz "the array is ordered as follows: "
    prompt4: .asciiz "-- Program is finished running --"
    str1: .asciiz ","
    newLine: .asciiz "\n"
.text

    addi $sp,$sp,-24
    sw $ra,0($sp)
    sw $s4,4($sp)
    sw $a2,8($sp)
    sw $s3,12($sp)
    sw $s0,16($sp)
    sw $s2,20($sp)
main:


    # read n from console
    li $v0 5
    syscall

    move $a2 $v0    #tagghiir t0 be a2 (n)

   # allocate dynamic memory
    sll $a0 $v0 2    # sll performs $a0 = $v0 x 2^2
    li $v0 9    #9 is the system code for service(sbrk) whoes work is        
    syscall     #to allocate dynamic memory


    move $a1 $v0 #t2 saved address of heap    #taghiir t2 to a1
  #saved for printing


    li $v0, 4       # $system call code for print_str
    la $a0, prompt2     # $address of string to print
    syscall  

    move $t1 $zero
    move $t4,$a1

    inputLoop:
        bge $t1 $a2 exit1

        # read in and store int
        li $v0 5
        syscall
        sw $v0 0($t4)

        addi $t1 $t1 1
        addi $t4 $t4 4

        li $v0, 4       # $system call code for print_str
        la $a0, newLine     # $address of string to print
        syscall

        j inputLoop

    exit1:

    jal sort
    li $v0, 4       # $system call code for print_str
    la $a0, prompt3     # $address of string to print
    syscall

    move $t3,$zero
    move $t4 ,$a1
    outputLoop:
        bge $t3 $a2 exit2

        #inaro azoon yki copy krdm
        lw $t6, 0($t4)

        li $v0, 1
        move $a0, $t6
        syscall
        # read in and store int
        addi $t3 $t3 1
        addi $t4 $t4 4
        blt $t4,$a1 ,comma
       # bne $t5,$zero,comma
        comma:
            li $v0, 4       # $system call code for print_str
            la $a0, str1     # $address of string to print
            syscall
        j outputLoop

    exit2:

    li $v0, 10
    syscall    #for finishing the program

swap:


    move  $a3,$a3
    move  $a1,$s4
   # move $t5,$zero # its for our temp variable in c code
    move $t4 ,$a1 #t4 is now the base address of heap
    sll $t6 , $a3,2 # s1 is the given k 
    add $t6,$t4,$t6 # heap address + k*4
    lw $t3,0($t6) #khoone k e heap
    lw $t5,4($t6) #khoone k+1 heap
    sw $t5,0($t6)
    sw $t3,4($t6)
    jr $ra 




sort:


  #  move $s0,$zero #i=t0
    move $s4,$a1 #base address of heap
    addi $t5,$a2,-1 # meghdare i

    move $s2,$zero #its the flag

    while:
        addi $s2,$s2,1
        move $a3,$zero #j   #taghiir s1 be a3 (haman j va k
        forLoop:

            bge $a3,$t5,outOfLoop
            sll $t6,$a3,2    #j  
            add $t1,$t6,$a1 #v+j
            lw $t7,0($t1) #t7=heap[j]
            lw $t8,4($t1) #t8=heap[j+1]
            blt $t7,$t8,outOfIf
            move $s4,$a1
            move $s3,$a3

            jal swap
            addi $s2,$s2,-1
        outOfIf:
        addi $a3,$a3,1   #j++
        outOfLoop:
        addi $t5,$t5-1 #i--
        bgt $s2,$zero,exit_outter   #if a>=b break
        ble $t5,$zero,exit_outter   #if b=< c break
        j while

     exit_outter:
     lw $ra,0($sp)
     lw $s4,4($sp)
     lw $a2,8($sp)
     lw $s3,12($sp)
     lw $s0,16($sp)
     lw $s2,20($sp)
     addi $sp,$sp,24
     jr $ra

Where am I going wrong?

mips
mars
asked on Stack Overflow Dec 31, 2019 by fatecsa • edited Jan 4, 2020 by fatecsa

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0