Spring 2002INEL 4206 Microprocessors Lecture 5 1 Programming Universal Computers Instruction Sets Prof. Bienvenido Velez Lecture 5.

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

Goal: Write Programs in Assembly
Review of the MIPS Instruction Set Architecture. RISC Instruction Set Basics All operations on data apply to data in registers and typically change the.
The University of Adelaide, School of Computer Science
MIPS ISA-II: Procedure Calls & Program Assembly. (2) Module Outline Review ISA and understand instruction encodings Arithmetic and Logical Instructions.
MIPS ISA-II: Procedure Calls & Program Assembly. (2) Module Outline Review ISA and understand instruction encodings Arithmetic and Logical Instructions.
1 Procedure Calls, Linking & Launching Applications Lecture 15 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007.
Procedures in more detail. CMPE12cGabriel Hugh Elkaim 2 Why use procedures? –Code reuse –More readable code –Less code Microprocessors (and assembly languages)
10/9: Lecture Topics Starting a Program Exercise 3.2 from H+P Review of Assembly Language RISC vs. CISC.
CS1104 – Computer Organization PART 2: Computer Architecture Lecture 5 MIPS ISA & Assembly Language Programming.
Computer Architecture CSCE 350
MIPS Assembly Language Programming
CPS3340 COMPUTER ARCHITECTURE Fall Semester, /17/2013 Lecture 12: Procedures Instructor: Ashraf Yaseen DEPARTMENT OF MATH & COMPUTER SCIENCE CENTRAL.
Ch. 8 Functions.
The University of Adelaide, School of Computer Science
The University of Adelaide, School of Computer Science
CS3350B Computer Architecture Winter 2015 Lecture 4
1 COMS 361 Computer Organization Title: Instructions Date: 9/28/2004 Lecture Number: 10.
Assembly Language II CPSC 321 Andreas Klappenecker.
Procedures in more detail. CMPE12cCyrus Bazeghi 2 Procedures Why use procedures? Reuse of code More readable Less code Microprocessors (and assembly languages)
MIPS Assembly Language I Computer Architecture CPSC 321 Andreas Klappenecker.
CS 536 Spring Code generation I Lecture 20.
Computer Architecture CPSC 321 E. J. Kim. Overview Logical Instructions Shifts.
S. Barua – CPSC 440 CHAPTER 2 INSTRUCTIONS: LANGUAGE OF THE COMPUTER Goals – To get familiar with.
COMPUTER ARCHITECTURE & OPERATIONS I Instructor: Hao Ji.
1 Today  Finish-up procedures/stack  strlen example  Machine language, the binary representation for instructions. —We’ll see how it is designed for.
9/29: Lecture Topics Memory –Addressing (naming) –Address space sizing Data transfer instructions –load/store on arrays on arrays with variable indices.
Lecture 7: MIPS Instruction Set Today’s topic –Procedure call/return –Large constants Reminders –Homework #2 posted, due 9/17/
IT253: Computer Organization Lecture 4: Instruction Set Architecture Tonga Institute of Higher Education.
13/02/2009CA&O Lecture 04 by Engr. Umbreen Sabir Computer Architecture & Organization Instructions: Language of Computer Engr. Umbreen Sabir Computer Engineering.
Computer Architecture Instruction Set Architecture Lynn Choi Korea University.
Procedure Basics Computer Organization I 1 October 2009 © McQuain, Feng & Ribbens Procedure Support From previous study of high-level languages,
COSC 2021: Computer Organization Instructor: Dr. Amir Asif Department of Computer Science York University Handout # 3: MIPS Instruction Set I Topics: 1.
Prof. Necula CS 164 Lecture 141 Run-time Environments Lecture 8.
6.S078 - Computer Architecture: A Constructive Approach Introduction to SMIPS Li-Shiuan Peh Computer Science & Artificial Intelligence Lab. Massachusetts.
April 23, 2001Systems Architecture I1 Systems Architecture I (CS ) Lecture 9: Assemblers, Linkers, and Loaders * Jeremy R. Johnson Mon. April 23,
Lecture 4: MIPS Instruction Set
Spring 2002INEL 4206 Microprocessors Lecture 4 1 Practical Universal Computers Prof. Bienvenido Velez Lecture 4 Bits Wires Gates Turing Machines.
CHAPTER 6 Instruction Set Architecture 12/7/
Computer Architecture CSE 3322 Lecture 3 Assignment: 2.4.1, 2.4.4, 2.6.1, , Due 2/3/09 Read 2.8.
Chapter 2 CSF 2009 The MIPS Assembly Language. Stored Program Computers Instructions represented in binary, just like data Instructions and data stored.
Imperative Programming The Case of FORTRAN ICOM 4036 Lecture 4.
Computer Architecture CSE 3322 Lecture 4 Assignment: 2.4.1, 2.4.4, 2.6.1, , Due 2/10/09
Chapter 2 — Instructions: Language of the Computer — 1 Conditional Operations Branch to a labeled instruction if a condition is true – Otherwise, continue.
Fall 2004ICOM 4036 Programming Laguages Lecture 2 1 Low-Level Programming Prof. Bienvenido Velez ICOM 4036 Lecture 2.
COMPUTER ORGANIZATION LECTURE 3: ISA YASSER MOHAMMAD.
Fall 2002INEL 4206 Microprocessors Lecture 5 1 Programming Universal Computers Instruction Sets Prof. Bienvenido Velez Lecture 5.
Function Calls in Assembly MIPS R3000 Language (extensive use of stack) Updated 7/11/2013.
MIPS Assembly.
Computer Architecture & Operations I
Computer Architecture Instruction Set Architecture
MIPS Instruction Set Advantages
CS2100 Computer Organisation
Computer Architecture Instruction Set Architecture
Lecture 4: MIPS Instruction Set
ELEN 468 Advanced Logic Design
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
Computer Architecture (CS 207 D) Instruction Set Architecture ISA
ECE/CS 552: Instruction Sets – MIPS
Instructions - Type and Format
Lecture 4: MIPS Instruction Set
MIPS Instructions.
The University of Adelaide, School of Computer Science
Low-Level Programming
The University of Adelaide, School of Computer Science
Lecture 5: Procedure Calls
COMS 361 Computer Organization
Computer Architecture
Where is all the knowledge we lost with information? T. S. Eliot
9/27: Lecture Topics Memory Data transfer instructions
Presentation transcript:

Spring 2002INEL 4206 Microprocessors Lecture 5 1 Programming Universal Computers Instruction Sets Prof. Bienvenido Velez Lecture 5

Spring 2002INEL 4206 Microprocessors Lecture 5 2 What do we know? Instruction Set Architecture Processor Implementation From To How do we get here in the first place? What Next? Instruction Set Design

Spring 2002INEL 4206 Microprocessors Lecture 5 3 Outline Virtual Machines: Interpretation Revisited Example: From HLL to Machine Code Implementing HLL Abstractions –Control structures –Data Structures –Procedures and Functions

Spring 2002INEL 4206 Microprocessors Lecture 5 4 Virtual Machines (VM’s) Type of Virtual Machine ExamplesInstruction Elements Data ElementsComments Application Programs Spreadsheet, Word Processor Drag & Drop, GUI ops, macros cells, paragraphs, sections Visual, Graphical, Interactive Application Specific Abstractions Easy for Humans Hides HLL Level High-Level Language C, C++, Java, FORTRAN, Pascal if-then-else, procedures, loops arrays, structuresModular, Structured, Model Human Language/Thought General Purpose Abstractions Hides Lower Levels Assembly- Level SPIM, MASMdirectives, pseudo- instructions, macros registers, labelled memory cells Symbolic Instructions/Data Hides some machine details like alignment, address calculations Exposes Machine ISA Machine-Level (ISA) MIPS, Intel 80x86 load, store, add, branch bits, binary addresses Numeric, Binary Difficult for Humans

Spring 2002INEL 4206 Microprocessors Lecture 5 5 Computer Science in Perspective Application Programs High-Level Language Assembly Language Machine Language (ISA) CS1/CS2, Programming, Data Structures Programming Languages, Compilers Computer Architecture Computer Human Interaction, User Interfaces People computers INTERPRETATION A CORE theme all throughout Computer Science INEL 4206

Spring 2002INEL 4206 Microprocessors Lecture 5 6 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } We ignore procedures and I/O for now

Spring 2002INEL 4206 Microprocessors Lecture 5 7 Symbolic Name OpcodeAction I=0 Symbolic Name Action I=1 Comp AC ← not ACCompAC <- not AC ShR AC ← AC / 2ShRAC ← AC / 2 BrN AC < 0 ⇒ PC ← XBrNAC < 0 ⇒ PC ← MEM[X] Jump PC ← XJumpPC ← MEM[X] Store MEM[X] ← ACStoreMEM[MEM[X]] ← AC Load AC ← MEM[X]LoadAC ← MEM[MEM[X]] Andc AC ← AC and XAndAC ← AC and MEM[X] Addc AC ← AC + XAddAC ← AC + MEM[X] Easy I A Simple Accumulator Processor Instruction Set Architecture (ISA) Instruction Set

Spring 2002INEL 4206 Microprocessors Lecture 5 8 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Easy-I Assembly Language C++

Spring 2002INEL 4206 Microprocessors Lecture 5 9 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b 1004) andc 0# AC = 0 store 1008# result = ) Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Translate Data: Global Layout Easy-I Assembly Language C++ Issues Memory allocation Data Alignment Data Sizing

Spring 2002INEL 4206 Microprocessors Lecture 5 10 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Translate Code: Conditionals If-Then 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b 1004) andc 0# AC = 0 store 1008# result = ) main:load 1004# compute a – b in AC comp# using 2’s complement add addc 1 add 1000 brn exit# exit if AC negative exit: Easy-I Assembly Language C++ Issues Must translate HLL boolean expression into ISA-level branching condition

Spring 2002INEL 4206 Microprocessors Lecture 5 11 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Translate Code: Iteration (loops) 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b 1004) andc 0# AC = 0 store 1008# result = ) main:load 1004# compute a – b in AC comp# using 2’s complement add addc 1 add 1000 brn exit# exit if AC negative loop:load 1000 brn endloop jump loop endloop: exit: Easy-I Assembly Language C++

Spring 2002INEL 4206 Microprocessors Lecture 5 12 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Translate Code: Arithmetic Ops 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b 1004) andc 0# AC = 0 store 1008# result = ) main:load 1004# compute a – b in AC comp# using 2’s complement add addc 1 add 1000 brn exit# exit if AC negative loop:load 1000 brn endloop load 1004 comp add 1004# Uses indirect bit I = 1 jump loop endloop: exit: Easy-I Assembly Language C++

Spring 2002INEL 4206 Microprocessors Lecture 5 13 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Translate Code: Assignments 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b 1004) andc 0# AC = 0 store 1008# result = ) main:load 1004# compute a – b in AC comp# using 2’s complement add addc 1 add 1000 brn exit# exit if AC negative loop:load 1000 brn endloop load 1004 comp add 1004# Uses indirect bit I = 1 store 1000 jump loop endloop: exit: Easy-I Assembly Language C++

Spring 2002INEL 4206 Microprocessors Lecture 5 14 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { if (a >= b) { while (a > 0) { a = a - b; result ++; } Translate Code: Increments 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b 1004) andc 0# AC = 0 store 1008# result = ) main:load 1004# compute a – b in AC comp# using 2’s complement add addc 1 add 1000 brn exit# exit if AC negative loop:load 1000 brn endloop load 1004 comp add 1004# Uses indirect bit I = 1 store 1000 load 1012# result = result + 1 addc 1 store 1012 jump loop endloop: exit: Easy-I Assembly Language C++

Spring 2002INEL 4206 Microprocessors Lecture 5 15 Computing Integer Division Easy I Machine Code AddressI BitOpcode (binary) X (base 10) unused unused AddressContents 1000a 1004b 1008result Data Program Challenge Make this program as small and fast as possible

Spring 2002INEL 4206 Microprocessors Lecture 5 16 The MIPS Architecture ISA at a Glance Reduced Instruction Set Computer (RISC) 32 general purpose 32-bit registers Load-store architecture: Operands in registers Byte Addressable 32-bit address space

Spring 2002INEL 4206 Microprocessors Lecture 5 17 Simple and uniform 32-bit 3-operand instruction formats –R Format: Arithmetic/Logic operations on registers –I Format: Branches, loads and stores The MIPS Architecture Instruction Formats opcode 6 bits rs 5 bits rt 5 bits rd 5 bits shamt 5 bits funct 6 bits opcode 6 bits rs 5 bits rt 5 bits address 16 bits

Spring 2002INEL 4206 Microprocessors Lecture 5 18 The MIPS Architecture Memory Usage

Spring 2002INEL 4206 Microprocessors Lecture 5 19 SPIM Assembler Help Symbolic Labels Assembler Directives Pseudo-Instructions Macros

Spring 2002INEL 4206 Microprocessors Lecture 5 20 Computing Integer Division Iterative C++ Version int a = 12; int b = 4; int result = 0; main () { while (a >= b) { a = a - b; result ++; } Global Variable Layout MIPS Assembly Language C++.data# Use HLL program as a comment x:.word12# int x = 12; y:.word4# int y = 4; res:.word0# int res = 0;.globlmain.text main:la$s0, x# Allocate registers for globals lw$s1, 0($s0)# x in $s1 lw$s2, 4($s0)# y in $s2 lw$s3, 8($s0)# res in $s3 while:bgt$s2, $s1, endwhile# while (x <= y) { sub$s1, $s1, $s2# x = x - y; addi$s3, $s3, 1# res ++; jwhile# } endwhile: la$s0, x# Update variables in memory sw$s1, 0($s0) sw$s2, 4($s0) sw$s3, 8($s0) jr$ra

Spring 2002INEL 4206 Microprocessors Lecture 5 21 Implementing Procedures Why procedures? –Abstraction –Modularity –Code re-use Initial Goal –Write segments of assembly code that can be re-used, or “called” from different points in the program. –KISS: no parameters, no recursion, no locals, no return values

Spring 2002INEL 4206 Microprocessors Lecture 5 22 Procedure Linkage Approach I Problem –procedure must determine where to return after servicing the call Solution –Add a jump instruction that saves the return address in some place known to callee MIPS: jal instruction saves return address in register $ra –Add an instruction that can jump to an address contained in a register MIPS: jr instruction jumps to the address contained in its argument register

Spring 2002INEL 4206 Microprocessors Lecture 5 23 Computing Integer Division (Procedure Version) Iterative C++ Version int a = 0; int b = 0; int result = 0; main () { a = 12; b = 5; res = 0; div(); printf(“Res = %d”,res); } void div(void) { while (a >= b) { a = a - b; result ++; } MIPS Assembly Language C++ # main function (Up to now, we have ignored that main is indeed a function #PENDING ISSUES: main must save $ra before calling other functions main:int main() { # main assumes registers sx unused li$s1, 12# x = 12; usw$s1, x li$s2, 5# y = 5; usw$s2, y li$s3, 0# res = 0; usw$s3, res jald# div(); la$a0, pf1# printf("Result = %d \n"); li$v0, 4# //system call to print_str syscall move$a0, $s3 li$v0, 1# //system call to print_int syscall la$a0, pf2# printf("Remainder = %d \n"); li$v0, 4# //system call to print_str syscall move$a0, $s1 li$v0, 1# //system call to print_int syscall jr$ra# return; # } # div function # PROBLEM: Must save args and registers before using them d:# void d(void) { # Allocate registers for globals ulw$s1, x# x in $s1 ulw$s2, y# y in $s2 ulw$s3, res# result in $s3 while:bgt$s2, $s1, endwhile# while (x <= y) { sub$s1, $s1, $s2# x = x - y addi$s3, $s3, 1# res ++ jwhile# } endwhile:# Update variables in memory usw$s1, x usw$s2, y usw$s3, res enddiv:jr$ra# return; # }

Spring 2002INEL 4206 Microprocessors Lecture 5 24 Pending Problems With Linkage Approach I Registers must be shared by all procedures Procedures should be able to call other procedures Lack of parameters forces access to globals Recursion requires multiple copies of local data Need a convention for returning function values

Spring 2002INEL 4206 Microprocessors Lecture 5 25 Solution: Use Stacks of Procedure Frames Stack frame contains: –Saved arguments –Saved registers –Return address –Local variables main stack frame div stack frame OS stack growth

Spring 2002INEL 4206 Microprocessors Lecture 5 26 Anatomy of a Stack Frame function arguments saved registers return address Contract: Every function must leave the stack the way it found it local variables of static size caller’s stack frame work area frame pointer stack pointer

Spring 2002INEL 4206 Microprocessors Lecture 5 27 Example: Function Linkage using Stack Frames int x = 0; int y = 0; int res = 0; main () { x = 12; y = 5; res = div(x,y); printf(“Res = %d”,res); } int div(int a,int b) { int res = 0; if (a >= b) { res = div(a-b,b) + 1; } else { res = 0; } return res; } Add return values Add parameters Add recursion Add local variables

Spring 2002INEL 4206 Microprocessors Lecture 5 28 MIPS: Procedure Linkage Summary First 4 arguments passed in $a0-$a3 Other arguments passed on the stack Return address passed in $ra Return value(s) returned in $v0-$v1 Sx registers saved by callee Tx registers saved by caller