Question
################################################################################### ############ # DATA BLOCK .data # STARTS AT: 0x10010000 nums: .word 0 : 12 # array of 12 words to contain values size: .word
################################################################################### ############ # DATA BLOCK .data # STARTS AT: 0x10010000 nums: .word 0 : 12 # "array" of 12 words to contain values size: .word 12 # 0x10010000 + 48 (12*4) space:.asciiz " " # 0x10010000 + 52 (4 more) head: .asciiz " Array: " # 0x10010000 + 54 (2 more) .text ################################################################################### ############ ################################################################################### ############ # LOAD MEMORY ADDRESSES lui $t0, 0x1001 # Start of data section ori $s0, $t0, 0 # Array is the first piece of data (0 away) lui $t0, 0x1001 # Start of data section ori $t0, $t0, 48 # 12 elements * 4 lw $s5, 0($t0) # load value of size # AT THIS POINT: # $s0 is the address of the start of the array # $s5 is the size (= 12) ################################################################################### ############ ################################################################################### ############ # POPULATE ARRAY addi $t1, $zero, 55 sw $t1, 0($s0) addi $t1, $zero, 88 sw $t1, 4($s0) addi $t1, $zero, 0 sw $t1, 8($s0) addi $t1, $zero, 22 sw $t1, 12($s0) addi $t1, $zero, 77 sw $t1, 16($s0) addi $t1, $zero, 44 sw $t1, 20($s0) addi $t1, $zero, 99 sw $t1, 24($s0) addi $t1, $zero, 33 sw $t1, 28($s0) addi $t1, $zero, 110 sw $t1, 32($s0) addi $t1, $zero, 66 sw $t1, 36($s0) addi $t1, $zero, 121 sw $t1, 40($s0) addi $t1, $zero, 11 sw $t1, 44($s0) ################################################################################### ################ ################################################################################### ################ # INITIALIZE i and j
addi $s1, $zero, 2 # Value for i, should be set to any valid index addi $s2, $zero, 5 # Value for j, should be set to any valid index ################################################################################### ################ ################################################################################### ################ # PRINT ARRAY addi $sp, $sp, -12 sw $a0, 0($sp) sw $a1, 4($sp) sw $ra, 8($sp) add $a0, $s0, $zero # First argument - starting address of array add $a1, $s5, $zero # Second argument - size jal print # call print routine. lw $ra, 8($sp) lw $a1, 4($sp) lw $a0, 0($sp) addi $sp, $sp, 12 ################################################################################### ################ ################################################################################### ################ # PUT SWAP CODE HERE ################################################################################### ################ ################################################################################### ################ # PRINT ARRAY addi $sp, $sp, -12 sw $a0, 0($sp) sw $a1, 4($sp) sw $ra, 8($sp) add $a0, $s0, $zero # First argument - starting address of array add $a1, $s5, $zero # Second argument - size jal print # call print routine. lw $ra, 8($sp) lw $a1, 4($sp) lw $a0, 0($sp) addi $sp, $sp, 12 ################################################################################### ################ ################################################################################### ################ # EXIT THE PROGRAM addi $v0, $zero, 10 # EXIT=10 syscall # DONE ################################################################################### ################ ################################################################################### ################ # PRINT FUNCTION print:
################################################################################### ########## # SAVE $s REGISTERS addi $sp, $sp, -4 # Save $s registers sw $s0, 0($sp) ################################################################################### ########## ################################################################################### ########## # PRINT PREFIX addi $sp, $sp, -12 sw $a0, 0($sp) sw $a1, 4($sp) sw $ra, 8($sp) lui $t0, 0x1001 ori $a0, $t0, 54 # Address of prefix is first argument addi $v0, $zero, 4 # PRINTSTR=4 syscall lw $ra, 8($sp) lw $a1, 4($sp) lw $a0, 0($sp) addi $sp, $sp, 12 ################################################################################### ########## ################################################################################### ########## # Pseudocode: for (i = 0; i
sw $ra, 8($sp) lui $t0, 0x1001 ori $a0, $t0, 52 # Address of space is first argument addi $v0, $zero, 4 # PRINTSTR=4 syscall lw $ra, 8($sp) lw $a1, 4($sp) lw $a0, 0($sp) addi $sp, $sp, 12 ############################################################################## ############################################################################## # INCREMENT i addi $s0, $s0, 1 ############################################################################## ############################################################################## # LOOP BACK j loop ############################################################################## done: ################################################################################### ########## # RETURN lw $s0, 0($sp) addi $sp, $sp, 4 # Reload $s registers jr $ra ################################################################################### ########## ###################################################################################
MARS MARS is an Interactive Development Environment where you can write MIPS code and view the underlying registers and RAM as it executes: ST Run septe W sar We Sul 1992 DI 12 . 10 13 114 ET BL TH 1. 1. 12 . 1. SO W. 1. w Der LI 050 RAS a ish 1. To open MARS, download both the Mars JAR file from Canvas and the starter template IP1.part2.asm. Double-click the JAR file, then click File->Open and select IP1.part2.asm. Your screen should look similar to the image above. Note: The program you are constructing appears on the left side. The 32 MIPS registers along with their current values appear on the right. 2. Click Run->Assemble, then Run->Go. You will now see the final contents of RAM appear in the "Data Segment" section. If you instead click Run->Step, you can view RAM and Registers as the program runs: 1 L www. BIO! RO Fiat 4. W! SH 6 w INS ROUW SMERTEL DELLI 2 LI 18 al Horses HER ER COM In particular, note the multiples of 11 that appear sequentially in RAM. This is actually a 12-element array that I constructed, and that we will eventually sort in Part 3. Swap Code Central to many sorting algorithms is the ability to swap array elements that are in the wrong order. Since we have not yet covered conditional (if) statements in MIPS and we would need that to check for ordering, we will for now just concern ourselves with swapping two elements i and j, i.e. in Java. Task: At the point in 1P1.part2.asm marked "PUT CODE HERE FOR SWAP", translate the following lines: int tmp = nums[i]; nums[i] = nums [i]: nums[i] = tmp: to MIPS. You can assume that the starting address of nums is in $30, 1 is in $si, and j is in $32. Note: Your code should work for any i and j between 0 and 11. Some points to remember: 1. You will need another $s register for tmp. Remember do not use $30, $31, or $s2 - or you will overwrite nums, i, and j. Also do not use $35, as that is the size. Remember: Variables in MIPS should always use $3 registers. This is important, as I outlined in lecture - $t registers (being "temporary") can lose their contents if a function is called
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started