(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 --
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.