Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Spring 2002INEL 4206 Microprocessors Lecture 5 1 Programming Universal Computers Instruction Sets Prof. Bienvenido Velez Lecture 5."— Presentation transcript:

1

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

3 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

4 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

5 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

6 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

7 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

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

9 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++

10 Spring 2002INEL 4206 Microprocessors Lecture 5 9 0:andc 0# AC = 0 addc 12 store 1000# a = 12 (a stored @ 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b stored @ 1004) andc 0# AC = 0 store 1008# result = 0 (result @ 1008) 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

11 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 stored @ 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b stored @ 1004) andc 0# AC = 0 store 1008# result = 0 (result @ 1008) 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

12 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 stored @ 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b stored @ 1004) andc 0# AC = 0 store 1008# result = 0 (result @ 1008) 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++

13 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 stored @ 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b stored @ 1004) andc 0# AC = 0 store 1008# result = 0 (result @ 1008) 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++

14 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 stored @ 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b stored @ 1004) andc 0# AC = 0 store 1008# result = 0 (result @ 1008) 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++

15 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 stored @ 1000) andc 0# AC = 0 addc 4 store 1004# b = 4 (b stored @ 1004) andc 0# AC = 0 store 1008# result = 0 (result @ 1008) 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++

16 Spring 2002INEL 4206 Microprocessors Lecture 5 15 Computing Integer Division Easy I Machine Code AddressI BitOpcode (binary) X (base 10) 0000 1100 2000 11112 4000 1001000 6000 1100 8000 1114 10000 1001004 12000 1100 14000 1001008 16000 1011004 18000 000unused 20000 1111 22100 1111004 24000 01044 26000 1011000 28000 01044 30000 1011004 32000 000unused 34100 1111004 36000 1001008 38000 1011012 40000 1111 42000 1011000 44000 01126 AddressContents 1000a 1004b 1008result Data Program Challenge Make this program as small and fast as possible

17 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

18 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

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

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

21 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

22 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

23 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

24 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; # }

25 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

26 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

27 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

28 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

29 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


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

Similar presentations


Ads by Google