# MIPS Coding - Florida State University

MIPS Coding Loop example 4 Suppose we have three arrays, A, B, C, all of size 10. Now we want to set C[i] = min(A[i], B[i]) for all 0<= i <= 9. 02/21/2020 week04-3.ppt 2 Loop example 4 Suppose we have three arrays, A, B, C, all of size 10. Now we want to set C[i] = min(A[i], B[i]) for all 0<= i <= 9. First, we need a loop to walk through the elements (done before) Second, we need to be able to read the elements (done before) Third, we need to be able to compare two numbers (done before) Fourth, we need to write back to the memory (easy) 02/21/2020

week04-3.ppt 3 .data A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9 C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text .globl main main: la \$s0, A la \$s1, B la \$s2, C li \$s3, 10 done:li \$v0,10 syscall .data A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9 C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text

.globl main main: la \$s0, A la \$s1, B la \$s2, C li \$s3, 10 li \$t0, 0 # using \$t0 as i LOOP:addi \$t0, \$t0, 1 bne \$t0, \$s3, LOOP done:li \$v0,10 syscall # i ++ # go back if not yet 10 times .data A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9 C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text

.globl main main: la \$s0, A la \$s1, B la \$s2, C li \$s3, 10 li \$t0, 0 # using \$t0 as i LOOP:sll \$t4, \$t0, 2 # \$t4 = i * 4 add \$t5, \$t4,\$s0 # \$t5 will have the address of A[i] lw \$t1, 0(\$t5) # \$t1 has A[i] add \$t6, \$t4,\$s1 # \$t6 will have the address of B[i] lw \$t2, 0(\$t6) # \$t2 has B[i] addi \$t0, \$t0, 1 # i ++

bne \$t0, \$s3, LOOP done:li \$v0,10 syscall # go back if not yet 10 times .data A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9 C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text .globl main main: la \$s0, A la \$s1, B la \$s2, C li \$s3, 10 li \$t0, 0 # using \$t0 as i LOOP:sll \$t4, \$t0, 2

# \$t4 = i * 4 add \$t5, \$t4,\$s0 # \$t5 will have the address of A[i] lw \$t1, 0(\$t5) # \$t1 has A[i] add \$t6, \$t4,\$s1 # \$t6 will have the address of B[i] lw \$t2, 0(\$t6) # \$t2 has B[i] slt \$t5, \$t1, \$t2 # set \$t5 to be 1 if A[i] < B[i] beq \$t5, \$0, L1 # if \$t5 == 0, goto L1. in this case, A[i] >= B[i] ori \$t8, \$t1, 0 # setting \$t8 to be A[i] j L2 # always remember to jump in an if else! L1: ori \$t8, \$t2, 0 # setting \$t8 to be B[i] L2: addi \$t0, \$t0, 1# i ++

bne \$t0, \$s3, LOOP done:li \$v0,10 syscall # go back if not yet 10 times .data A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9 C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text .globl main main: la \$s0, A la \$s1, B la \$s2, C li \$s3, 10 li \$t0, 0 # using \$t0 as i LOOP:sll \$t4, \$t0, 2

# \$t4 = i * 4 add \$t5, \$t4,\$s0 # \$t5 will have the address of A[i] lw \$t1, 0(\$t5) # \$t1 has A[i] add \$t6, \$t4,\$s1 # \$t6 will have the address of B[i] lw \$t2, 0(\$t6) # \$t2 has B[i] slt \$t5, \$t1, \$t2 # set \$t5 to be 1 if A[i] < B[i] beq \$t5, \$0, L1 # if \$t5 == 0, goto L1. in this case, A[i] >= B[i] ori \$t8, \$t1, 0 # setting \$t8 to be A[i] j L2 # always remember to jump in an if else! L1: ori \$t8, \$t2, 0 # setting \$t8 to be B[i] L2:

add \$t6, \$t4, \$s2 sw \$t8, 0(\$t6) # now \$t6 has the address of C[i] # now C[i] has the minimum of A[i] and B[i] addi \$t0, \$t0, 1 # i ++ bne \$t0, \$s3, LOOP done:li \$v0,10 syscall # go back if not yet 10 times Loop Example 5 The bubble sort 02/21/2020 week04-3.ppt 9 The bubble sort

Need two loops just encapsulate one in the other Need to read the elements done before. Need to compare two numbers done before Need to swap not that hard A: .data .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 .text .globl main main: la \$s7, A li \$s6, 9 # getting the address # N-1 li \$s0, 0 # i = 0 LOOP1: addi \$s0, \$s0, 1 # i = i + 1 bne \$s0, \$s6, LOOP1 # if i != N-1, outer loop again

done: li \$v0,10 syscall Getting the first loop done .data .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 A: .text .globl main main: la \$s7, A li \$s6, 9 # getting the address # N-1 li \$s0, 0 # i = 0 LOOP1: li \$s1, 0 # j = 0

LOOP2: addi \$s1, \$s1, 1 # j = j + 1 sub \$t7, \$s6, \$s0 # \$t7 will get N-1-i bne \$s1, \$t7, LOOP2 # if j != N-1-i, inner loop again addi \$s0, \$s0, 1 # i = i + 1 bne \$s0, \$s6, LOOP1 # if i != N-1, outer loop again done: li \$v0,10 syscall Getting both loop done .data .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 A: .text .globl main main:

la \$s7, A li \$s6, 9 # getting the address # N-1 li \$s0, 0 # i = 0 LOOP1: li \$s1, 0 # j = 0 LOOP2: sll \$t0, \$s1, 2 # \$t0 = j * 4 add \$t0, \$t0, \$s7 # \$t0 is the address of A[j] lw \$t1, 0(\$t0) # \$t1 = A[j] lw \$t2, 4(\$t0) # \$t2 = A[j+1] addi \$s1, \$s1, 1 # j = j + 1 sub \$t7, \$s6, \$s0 # \$t7 will get N-1-i bne \$s1, \$t7, LOOP2 # if j != N-1-i, inner loop again

addi \$s0, \$s0, 1 # i = i + 1 bne \$s0, \$s6, LOOP1 # if i != N-1, outer loop again done: li \$v0,10 syscall Adding the code to read the elements A[j] and A[j+1] .data .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19 A: .text .globl main main: la \$s7, A li \$s6, 9 # getting the address # N-1 li \$s0, 0

# i = 0 LOOP1: li \$s1, 0 # j = 0 LOOP2: sll \$t0, \$s1, 2 # \$t0 = j * 4 add \$t0, \$t0, \$s7 # \$t0 is the address of A[j] lw \$t1, 0(\$t0) # \$t1 = A[j] lw \$t2, 4(\$t0) # \$t2 = A[j+1] bgt \$t1, \$t2, L1 # if A[j] > A[j+1] goto L1, bypass the swapping sw \$t1, 4(\$t0) # do the swap sw \$t2, 0(\$t0) # do the swap L1: addi \$s1, \$s1, 1 # j = j + 1 sub \$t7, \$s6, \$s0 # \$t7 will get N-1-i bne \$s1, \$t7, LOOP2

# if j != N-1-i, inner loop again addi \$s0, \$s0, 1 # i = i + 1 bne \$s0, \$s6, LOOP1 # if i != N-1, outer loop again done: li \$v0,10 syscall Adding the comparison and swapping Pseudo instruction A pseudo instruction is not a real instruction supported by the hardware. It is created to make the coding easier. It is mapped to a unique sequence of real instructions by the assembler. We have seen some: li \$s0, 0 # load immediate number, often mapped to ori. la \$s7, A # load the address of label A into \$s7 bgt \$t1, \$t2, L1 # branch if \$t1 is greater than \$t2. ``blt also exits. In-class exercise -- Loop Data segment and code segment The code has a data segment and a code (text) segment.

The beginning of the data segment in the assembly source code is indicated as .data and followed by several declarations such as A: .word 0,1,2,3,4,5,6,7,8,9 meaning an array of words whose starting address is associated with label ``A. Several notes: It will allocate continuous spaces in the memory for the data .word means everything is 4 bytes save: is a label associated with the address of the first byte allocated. Like the label for the instructions, label for an address is also an address.

## Recently Viewed Presentations

• The British Rule of India Ian Woolford Department of Asian Studies The University of Texas at Austin * In 1919 there was a terrible massacre. British troops opened fire on an unarmed group of people who were assembling peacefully.
• dominic k atweam health information systems analystghana health service policy planing monitoring and evaluation division. ghana health service health information exchange . implemented . by the centre for health information management-policy planing monitoring and evaluation division
• Liquidity is . a measure of the ease with which an asset can be turned into a means of payment. ... Stored-value card. Take it to a bank or an ATM, transfer money to the card, then use the card...
• party pay) and if anyone else called in and needed a ride, and seats were available on the vehicle during that trip, the transit system would put those other individuals on the bus. This is a subset of demand response...
• And in truth, on the occasion when he laid before the senate his proposal to call Rome Commodiana, not only did the senate gleefully pass this resolution, but also took the name "Commodian" to itself, at the same time giving...
• Homework! There is homework that will count 1/6 of your total grade. Written exercises, find a couple of protocols errors, correct a protocol, and design a protocol of your own.
• Arial Comic Sans MS Times New Roman Tahoma Times Wingdings Modèle par défaut Photo Editor 3.0 Photo Graphique Microsoft Graph Graphique Microsoft Office Excel Impacts économique, social et territorial des filières AOC savoyardes L'importance des fromages sous signes de qualité...
• Buying & Selling on eBay Richard Kershenbaum Endacott Society Computer Study Group 01-06-2009 "The world's online marketplace" 88 million active users Over one billion page views per day Started in 1995 by programmer Pierre Omidyar of Echo Bay Technologies First...