Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

(I do not understand why my Mips Assembly code is not working please help!!) I a

ID: 3822599 • Letter: #

Question

(I do not understand why my Mips Assembly code is not working please help!!) I am using Qtspim to run my code.

.data
jnum: .word 8
Num: .word 0,0,7,6,5,4,8,7
Max: .asciiz "max:"
Min: .asciiz "min:"
Average: .asciiz "avg:"
Rema: .asciiz "/"
Nextline: .asciiz " "
Bye: .asciiz "Adios!"
.text
.global

main:

jal MaxIs
jal MinIs


la $a0,Num
lw $t4,jnum
add $t0,$zero,$zero
add $t3,$zero,$zero

loop:
lw $t2,0($a0)
add $t3,$t3,$t2
add $a0,$a0,4
addi $t0,$t0,1
slti $t1,$t0,9
bne $t1,$zero,loop
div $t3,$t4
mfhi $t5
mflo $s6
li $v0,4
la $a0,Average
syscall

li $v0,1
move $a0,$t5
syscall

li $v0,4
la $a0,rema
syscall

li $v0,1
move $a0,$s6
syscall

li $v0,4
la $a0,Nextline
syscall

li $v0,4
la $a0,Bye
syscall

li $v0,10
syscall

.end main

MinIs:
la $a0,
lw $t4,0($a0)
add $t0,$zero,$zero

loopa:
slti $t1,$t0,4
beq $t1,$zero,print
lw $t1,0($a0)
add $a0,$a0,4
lw $t2,0($a0)
ble $t1,$t2,set
j setelse

setelse:
ble $t2,$t4,setelsef
add $a0,$a0,4
addi $t0,$t0,1

j loopa
setelsef:
move $t4,$t2
add $a0,$a0,4
addi $t0,$t0,1

j loopa
set:
ble $t1,$t4,setf
add $a0,$a0,4
addi $t0,$t0,1

j loopa
setf:
move $t4,$t1
add $a0,$a0,4
addi $t0,$t0,1

j loopa
print:
li $v0,4
la $a0,Min
syscall

li $v0,1
move $a0,$t4
syscall

li $v0,4
la $a0,Nextline
syscall

jr $ra
.end MinIs

MaxIs:
la $a0,Num
add $t0,$zero,$zero

loopb:
slti $t1,$t0,5
beq $t1,$zero,printb
lw $t1,0($a0)
add $a0,$a0,4
lw $t2,0($a0)
bgt $t1,$t2,seta
j setelsea

setelsea:
bgt $t2,$t4,setelsefa
add $a0,$a0,4
addi $t0,$t0,1

j loopb
setelsefa:
move $t4,$t2
add $a0,$a0,4
addi $t0,$t0,1

j loopb
seta:
bgt $t1,$t4,setfa
add $a0,$a0,4
addi $t0,$t0,1

j loopb
setfa:
move $t4,$t1
add $a0,$a0,4
addi $t0,$t0,1

j loopb
printb:
li $v0,4
la $a0,Max
syscall

li $v0,1
move $a0,$t4
syscall

li $v0,4
la $a0,Nextline
syscall

jr $ra
.end MaxIs

Explanation / Answer

Hi,

There are multiple compilation and logical errors in your program. I'm listing them here, with the explanation. In the code, find these lines in bold.

1. MIPS doesn't have .end, so it gives compilation warnings. I removed all the .end lines.

2. In MIPS, you need to mention .globl main instead of .global

3. In MinIs function, you didn't load anything into $a0 which is why there is a compilation error there. Changed it to la $a0,Num from la $a0,

4. In line 37, you used rema instead of Rema. Compilation error

Note: Your function to find minimum is correct, but you are going out of bounds in MaxIs function.

5. In MaxIs function, you are not loading anything into $t4 but you are comparing $t0 to $t4. To correct this add this line lw $t4,0($a0)

6. div command stores the Remainder and Quotient in Hi and Lo respectively. I assume that is not what you want for average. Instead It should be sum of numbers by total numbers present.

7. Suggestion: To avoid such trivial errors, always comment your code.

Code:

.data
jnum: .word 8
Num: .word 0,0,7,6,5,4,8,7
Max: .asciiz "max:"
Min: .asciiz "min:"
Average: .asciiz "avg:"
Rema: .asciiz "/"
Nextline: .asciiz " "
Bye: .asciiz "Adios!"
.text
.globl main
main:
jal MaxIs
jal MinIs

la $a0,Num
lw $t4,jnum
add $t0,$zero,$zero
add $t3,$zero,$zero
loop:
lw $t2,0($a0)
add $t3,$t3,$t2
add $a0,$a0,4
addi $t0,$t0,1
#slti $t1,$t0,9
bne $t0,$t4,loop
#div $t3,$t4
#mfhi $t5
#mflo $s6
li $v0,4
la $a0,Average
syscall
li $v0,1
move $a0,$t3
syscall
li $v0,4
la $a0,Rema
syscall
li $v0,1
move $a0,$t4
syscall

li $v0,4
la $a0,Nextline
syscall
li $v0,4
la $a0,Bye
syscall
li $v0,10
syscall

MinIs:
la $a0,Num
lw $t4,0($a0)
add $t0,$zero,$zero
loopa:
slti $t1,$t0,4
beq $t1,$zero,print
lw $t1,0($a0)
add $a0,$a0,4
lw $t2,0($a0)
ble $t1,$t2,set
j setelse
setelse:
ble $t2,$t4,setelsef
add $a0,$a0,4
addi $t0,$t0,1
j loopa
setelsef:
move $t4,$t2
add $a0,$a0,4
addi $t0,$t0,1
j loopa
set:
ble $t1,$t4,setf
add $a0,$a0,4
addi $t0,$t0,1
j loopa
setf:
move $t4,$t1
add $a0,$a0,4
addi $t0,$t0,1
j loopa
print:
li $v0,4
la $a0,Min
syscall
li $v0,1
move $a0,$t4
syscall
li $v0,4
la $a0,Nextline
syscall
jr $ra

MaxIs:
la $a0,Num
lw $t4,0($a0)
add $t0,$zero,$zero
loopb:
slti $t1,$t0,4
beq $t1,$zero,printb
lw $t1,0($a0)
add $a0,$a0,4
lw $t2,0($a0)
bgt $t1,$t2,seta
j setelsea
setelsea:
bgt $t2,$t4,setelsefa
add $a0,$a0,4
addi $t0,$t0,1
j loopb
setelsefa:
move $t4,$t2
add $a0,$a0,4
addi $t0,$t0,1
j loopb
seta:
bgt $t1,$t4,setfa
add $a0,$a0,4
addi $t0,$t0,1
j loopb
setfa:
move $t4,$t1
add $a0,$a0,4
addi $t0,$t0,1
j loopb
printb:
li $v0,4
la $a0,Max
syscall
li $v0,1
move $a0,$t4
syscall
li $v0,4
la $a0,Nextline
syscall
jr $ra

Output:

max:8
min:0
avg:37/8
Adios!
-- program is finished running --