MIPS Coding. Exercise – the bubble sort 5/8/2015week04-3.ppt2.

Slides:



Advertisements
Similar presentations
1 Lecture 3: MIPS Instruction Set Today’s topic:  More MIPS instructions  Procedure call/return Reminder: Assignment 1 is on the class web-page (due.
Advertisements

The University of Adelaide, School of Computer Science
CDA 3100 Recitation Week 8. Question 1.data A:.word 21,3,2,9,100,22,6,15,33,90.text.globl main main: la $a0, A li $a1, 17 li $a2, 10 jal funct li $v0,
Lecture 9: MIPS Instruction Set
Slides revised 3/25/2014 by Patrick Kelley. 2 Procedures Unlike other branching structures (loops, etc.) a Procedure has to return to where it was called.
1 Procedure Calls, Linking & Launching Applications Lecture 15 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007.
10/6: Lecture Topics Procedure call Calling conventions The stack
1 Lecture 4: Procedure Calls Today’s topics:  Procedure calls  Large constants  The compilation process Reminder: Assignment 1 is due on Thursday.
Lecture 6: MIPS Instruction Set Today’s topic –Control instructions –Procedure call/return 1.
Assembly Code Example Selection Sort.
The University of Adelaide, School of Computer Science
Computer Architecture CSCE 350
MIPS Function Continued
Ch. 8 Functions.
CS1104 – Computer Organization PART 2: Computer Architecture Lecture 4 Assembly Language Programming 2.
Apr. 12, 2000Systems Architecture I1 Systems Architecture I (CS ) Lecture 6: Branching and Procedures in MIPS* Jeremy R. Johnson Wed. Apr. 12, 2000.
The University of Adelaide, School of Computer Science
Lecture 8: MIPS Instruction Set
 Procedures (subroutines) allow the programmer to structure programs making them : › easier to understand and debug and › allowing code to be reused.
Informationsteknologi Saturday, September 29, 2007 Computer Architecture I - Class 41 Today’s class More assembly language programming.
MIPS Assembly Language I Computer Architecture CPSC 321 Andreas Klappenecker.
Intro to Computer Architecture
CHAPTER 2 ISA Instructions (logical + procedure call)
13/02/2009CA&O Lecture 04 by Engr. Umbreen Sabir Computer Architecture & Organization Instructions: Language of Computer Engr. Umbreen Sabir Computer Engineering.
MIPS function continued. Recursive functions So far, we have seen how to write – A simple function – A simple function that have to use the stack to save.
Lecture 18: 11/5/2002CS170 Fall CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University.
Lecture 19: 11/7/2002CS170 Fall CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University.
Procedure Basics Computer Organization I 1 October 2009 © McQuain, Feng & Ribbens Procedure Support From previous study of high-level languages,
Procedure (Method) Calls Ellen Spertus MCS 111 September 25, 2003.
Lecture 4: MIPS Instruction Set
MAL 3 - Procedures Lecture 13. MAL procedure call The use of procedures facilitates modular programming. Four steps to transfer to and return from a procedure:
Computer Architecture CSE 3322 Lecture 4 crystal.uta.edu/~jpatters/cse3322 Assignments due 9/15: 3.7, 3.9, 3.11.
MIPS coding. Review Shifting – Shift Left Logical (sll) – Shift Right Logical (srl) – Moves all of the bits to the left/right and fills in gap with 0’s.
MIPS coding. slt, slti slt $t3, $t1, $t2 – set $t3 to be 1 if $t1 < $t2 ; else clear $t3 to be 0. – “Set Less Than.” slti $t3, $t1, 100 – set $t3 to be.
Computer Architecture CSE 3322 Lecture 4 Assignment: 2.4.1, 2.4.4, 2.6.1, , Due 2/10/09
COMPUTER ORGANIZATION LECTURE 3: ISA YASSER MOHAMMAD.
1 Lecture 6: Assembly Programs Today’s topics:  Large constants  The compilation process  A full example  Intro to the MARS simulator.
MIPS Subroutines Subroutine Call – jal subname Saves RA in $31 and jumps to subroutine entry label subname Subroutine Return – jr $31 Loads PC with return.
Pushing the Return Address To return to the caller a subroutine must have the correct return address in $ra when the jr instruction is performed. But this.
Function Calling. Mips Assembly Call and Return Steps for procedure calling –Save the return address –Jump to the procedure (function) –Execute the procedure.
CMPUT Computer Organization and Architecture I1 CMPUT229 - Fall 2003 Topic4: Procedures José Nelson Amaral.
MIPS Coding. Exercise – the bubble sort 7/9/2016week04-3.ppt2.
Lecture 5: Procedure Calls
MIPS Assembly Language Programming
Lecture 6: Assembly Programs
Procedures 101: There and Back Again
MIPS Procedures.
MIPS instructions.
MIPS Procedures.
Addressing in Jumps jump j Label go to Label op address 2 address
Solutions Chapter 2.
MIPS Instructions.
The University of Adelaide, School of Computer Science
MIPS Functions.
MIPS Functions.
Lecture 5: Procedure Calls
Logical and Decision Operations
MIPS functions.
MIPS Procedures.
Review.
MIPS Coding.
MIPS function continued
MIPS Functions.
MIPS Coding.
Lecture 6: Assembly Programs
Where is all the knowledge we lost with information? T. S. Eliot
Procedure Support From previous study of high-level languages, we know the basic issues: - declaration: header, body, local variables - call and return.
MIPS Functions.
MIPS function continued
MIPS Functions.
Presentation transcript:

MIPS Coding

Exercise – the bubble sort 5/8/2015week04-3.ppt2

Exercise – 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

.data A:.word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19.text.globl main main: li $s0, 0 # i li $s6, 9 # N-1 la $s7, A LOOP2: li $s1, 0# j = 0 LOOP1: 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, LOOP1# if j != N-1-i, inner loop again addi $s0, $s0, 1# i = i + 1 bne $s0, $s6, LOOP2# if i != N-1, outer loop again done: li $v0,10 syscall

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

MIPS Procedures

5/8/2015week04-3.ppt8 Procedures and Functions We programmers use procedures and functions to structure and organize programs – To make them easier to understand – To allow code to be reused

Function A function carries out a well-defined functionality, that can be called and produce the result to be used by the caller.

Functions A function is a consecutive piece of code stored in the memory. To invoke (or call) a function, we must go to that piece of code. Then it does certain things, and get the result we need. What do we know about going to a piece of code?

Functions So, we can call a function by j Function And, the function code will do something we need. Problem: how to come back to the caller?

Two Interesting Instructions and One Interesting Register jal : jump and link – jal L1 : – does TWO things 1.Goto L1. (the next instruction to be executed is at address L1 ) 2.Save the address of the next instruction in $ra. $ra is the interesting register that stores the return address jr $ra – Does ONE thing. Goto the instruction whose address is the value stored in $ra. This is ALL we need to support function calls in MIPS!

A simple function

.data A:.word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19.text.globl main main: la $s7, A li $s0, 0 #i li $s1, 0 #res li $s6, 9 loop: sll $t0, $s0, 2 add $t0, $t0, $s7 lw $a0, 0($t0) lw $a1, 4($t0) jal addfun add $s1, $s1, $v0 addi $s0, $s0, 2 bgt $s0, $s6, done j loop done: li $v0,10 syscall addfun: add $v0, $a0, $a1 jr $ra

Key things to keep in mind 1.A function is just a segment of code stored sequentially in the memory. To call a function is just to go there. 2.The name of a function in MIPS is JUST A LABEL or JUST AN ADDRESS. 3.We cannot simply use “j addfun” to go to addfun, because we do not know where come back. Therefore, we need to store the address of the instruction that should be executed after going to the function somewhere, and in MIPS, it is $ra. 4.At the end of a function, we write “jr $ra”, to go back.

5/8/2015week04-3.ppt16 MIPS Calling Conventions MIPS assembly follows the following convention in using registers – $a0 - $a3: four argument registers in which to pass parameters – $v0 - $v1: two value registers in which to return values – $ra: one return address register to return to the point of origin

MIPS Conventions Quite often, our function needs to use some registers to do dome calculation. So we will modify the values of them. We can use $t0-$t9 freely inside a function, because the caller does not expect the values inside $t0-$t9 to stay the same after the function call. But, the caller do expect the values in $s0 to $s7 to be the same after a function call.

MIPS Conventions So, just try to avoid using $s0 and $s7 inside a function whenever possible. But what if do need it? Such occasions will arise…

Stack So, if we do have to use $s0 - $s7, we MUST save it somewhere before entering the main part of the function, and restore it before you return (before we execute “jr $ra”). In MIPS, we save them in the stack. Stack is a part in the memory allocated for functions. It starts at 0x7ffffffc and grows down as we add more stuffs to it. Stack is “first in last out.”

$sp The top address of the stack, the address of the first word that is storing value, is (should be) always be stored in $sp. So, adding a word into the stack (pushing a word onto the stack) is a two-step thing, because you have to maintain the correctness of $sp: – addi $sp, $sp, -4 – sw $s0, 0($sp)

Suppose we want to

Stack and $sp Suppose we want to store a/2 in $s0. – How do we get a/2? At the beginning, we do – addi $sp, $sp, -4 – sw $s0, 0($sp) At the end, we do – lw $s0, 0($sp) – addi $sp, $sp, 4

.data A:.word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19.text.globl main main: la $s7, A li $s0, 0 #i li $s1, 0 #res li $s6, 9 loop: sll $t0, $s0, 2 add $t0, $t0, $s7 lw $a0, 0($t0) lw $a1, 4($t0) jal weirdfun add $s1, $s1, $v0 addi $s0, $s0, 2 bgt $s0, $s6, done j loop done: li $v0,10 syscall weirdfun: addi $sp, $sp, -4 sw $s0, 0($sp) srl $s0, $a0, 1 add $t0, $a0, $a0 add $t0, $t0, $a1 sub $t0, $t0, $s0 ori $v0, $t0, 0 lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra

Function calls inside a function What if we need to call another function inside a function? Will this work? twofun: addi $sp, $sp, -4 sw $s0, 0($sp) jal addfun srl $s0, $a0, 1 add $v0, $v0, $s0, lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra

Function calls inside a function The problem is that the value of $ra is changed whenever you use jal somelabel. How to deal with it? twofun: addi $sp, $sp, -4 sw $s0, 0($sp) jal addfun srl $s0, $a0, 1 add $v0, $v0, $s0, lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra

The working versions twofun1: addi $sp, $sp, -4 sw $s0, 0($sp) addi $sp, $sp, -4 sw $ra, 0($sp) jal addfun srl $s0, $a0, 1 add $v0, $v0, $s0, lw $ra, 0($sp) addi $sp, $sp, 4 lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra twofun2: addi $sp, $sp, -8 sw $s0, 4($sp) sw $ra, 0($sp) jal addfun srl $s0, $a0, 1 add $v0, $v0, $s0, lw $ra, 0($sp) lw $s0, 4($sp) addi $sp, $sp, 8 jr $ra

Saving registers In case of nested function calls, before calling a function, to be safe, the caller should – save $t0-$t9 – save $a0-$a3 If such registers are needed later. and – save $ra Because $ra is going to be needed later and it will be changed The callee should – save $s0-s7