### Thread: MIPS finding the largest two integers of 3 inputs

1. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Oct 2011
Posts
2
Rep Power
0

#### MIPS finding the largest two integers of 3 inputs

Hi folks,
I am playing with some MIPS assembly language and am stuck on how to find the largest of 3 integers entered. I have figured out how to compare the first 2 with the branch instructions but I am unsure of the most efficient way to compare all 3. Here is what I had put together for code. The bge calls are where I am trying to figure out the best way to compare all 3. the first bge compares the first 2. Anyone have any insight?

Code:
```.text
.align 2
.globl main

main:
# this program prints out the largest two of three numbers input

li \$v0, 4
la \$a0, prompt1
syscall
li \$v0, 5 # read keyboard into \$v0 (number x is number to test)
syscall
move \$t0,\$v0 # first number in \$t0

li \$v0, 4
la \$a0, prompt2
syscall

li \$v0, 5 # read keyboard into \$v0 (number x is number to test)
syscall
move \$t1,\$v0 # second number in \$t1

li \$v0, 4
la \$a0, prompt3
syscall

li \$v0, 5 # read keyboard into \$v0 (number x is number to test)
syscall
move \$t2,\$v0 # third number in \$t2

bge \$t1, \$t0, L1
move \$t1, \$t0 # largest number in \$t1

bge \$t2, \$t1, L1
move \$t2, \$t1

L1:
li \$v0, 4 # print answer
syscall

li \$v0, 1 # print integer function call 1
move \$a0, \$t1 # integer to print
syscall

end: jr \$ra

.data
prompt1: .asciiz "Enter the first number "
prompt2: .asciiz "Enter the second number "
prompt3: .asciiz "Enter the third number "
answer: .asciiz "The largest number is "```
2. No Profile Picture
Lost in code
Devshed Supreme Being (6500+ posts)

Join Date
Dec 2004
Posts
8,314
Rep Power
7171
Code:
```# effectively these two lines do: \$t1 = max(\$t0, \$t1)
bge \$t1, \$t0, CMP2
move \$t1, \$t0

CMP2:
# effectively these two lines do: \$t1 = max(\$t2, \$t1)
bge \$t1, \$t2, L1
move \$t1, \$t2```
3. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Oct 2011
Posts
2
Rep Power
0
Kudos to you. I have updated the code to reflect your suggestion and tested it successfully. Makes sense to me now. The next piece I am interested in adding would be to find the 2 largest of the 3 integers entered. My thoughts would be to add another CMP3 statement and compare them again minus the largest we've already identified and stored? Would a sort type statement work better than doing these separately? Here is what the updated code looks like after adding your suggestion:

Code:
```.text
.align 2
.globl main

main: # this program prints out the largest two of three numbers input

li \$v0, 4
la \$a0, prompt1
syscall

li \$v0, 5 # read keyboard into \$v0 (number x is number to test)
syscall move \$t0,\$v0 # first number in \$t0

li \$v0, 4 la \$a0, prompt2
syscall

li \$v0, 5 # read keyboard into \$v0 (number x is number to test)
syscall
move \$t1,\$v0 # second number in \$t1

li \$v0, 4 la \$a0, prompt3
syscall

li \$v0, 5 # read keyboard into \$v0 (number x is number to test)
syscall
move \$t2,\$v0 # third number in \$t2

bge \$t1, \$t0, CMP2
move \$t1, \$t0 # largest number in \$t1

CMP2:
bge \$t1, \$t2, L1
move \$t1, \$t2

L1:
li \$v0, 4 # print answer
syscall

li \$v0, 1 # print integer function call 1
move \$a0, \$t1 # integer to print
syscall

end: jr \$ra

.data

prompt1: .asciiz "Enter the first number "
prompt2: .asciiz "Enter the second number "
prompt3: .asciiz "Enter the third number "
answer: .asciiz "The largest number is "```