MIPS Coding - Florida State University

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

  • Farai Pfende Dementia Practice Development Coach (DPDC) Head

    Farai Pfende Dementia Practice Development Coach (DPDC) Head

    Prof. Dawn Brooker, Isabelle Latham, Nicola Jacobson, Wendy Perry & Simon Evans . Developed by Association for Dementia Studies (ADS) Originally commissioned by the Alzheimer's Society and trialled with over 1000 staff . The project was funded by the Alzheimer's...
  • What Does the Next Generation System Look Like?

    What Does the Next Generation System Look Like?

    What Does the Next Generation System Look Like? Marshall Breeding. Independent Consult, Author, Founder and Publisher, Library Technology Guides
  • Measuring Engine Performance

    Measuring Engine Performance

    Engine Displacement. The total . volume. of space increase in the cylinder as the piston moves from the top to the bottom of its stroke. Determined by the circular area of the cylinder then multiplied by the total length of...
  • PowerPoint-Präsentation

    PowerPoint-Präsentation

    TIMI Flow before PCI Log BNP at Day 7/discharge Day 90 TNK+PCI TIMI 0-1 160 347 TIMI 2-3 319 128 TIMI 0-1 135 288 TIMI 2-3 260 114 ... TIMI Thrombus Grade & 90d death. T-TIME: no benefit of low-dose...
  • The Great Gatsby

    The Great Gatsby

    The eyes also come to represent the essential meaninglessness of the world and the arbitrariness of the mental process by which people invest objects with meaning. Gatsby's "books" An owl-eyed man at a Gatsby party sits in awe in the...
  • Diapositiva 1 - geohistsap

    Diapositiva 1 - geohistsap

    Bien abastecido Agua, madera,etc. Monasterio de Canigó Reconstrucción de un monasterio Plano de Cluny Doble transepto Cabecera semicircular Girola Maqueta de Cluny III Numerosas Torres y absidiolos Plano de monasterio cisterciense Testero plano Simplicidad Claustro.
  • Semantic Interoperability for the International Polar Year

    Semantic Interoperability for the International Polar Year

    Outcome Legacy of IPY will be a dynamic system for cross-domain information discovery and retrieval Community based Language neutral * Controlled Vocabularies - A controlled vocabulary is a restricted set of words used to describe resources or data. all terms...
  • The Science of the Genetic Modification of a Chicken

    The Science of the Genetic Modification of a Chicken

    Olivia Dodd. So how will this be done? Because of fairly recent advances in the study of genetics, people can now pick out what their child will look like if they wanted to. Also genes that carry heredity-linked diseases can...