CSC 3210 Computer Organization and Programming

Slides:



Advertisements
Similar presentations
Machine Instructions Operations 1 ITCS 3181 Logic and Computer Systems 2015 B. Wilkinson Slides4-1.ppt Modification date: March 18, 2015.
Advertisements

Deeper Assembly: Addressing, Conditions, Branching, and Loops
SPARC Architecture & Assembly Language
CSC 3210 Computer Organization and Programming Introduction and Overview Dr. Anu Bourgeois.
The CPU Revision Typical machine code instructions Using op-codes and operands Symbolic addressing. Conditional and unconditional branches.
CSCE 121, Sec 200, 507, 508 Fall 2010 Prof. Jennifer L. Welch.
Sparc Architecture Overview
Group 5 Alain J. Percial Paula A. Ortiz Francis X. Ruiz.
Computer Science 210 Computer Organization The Instruction Execution Cycle.
Chapter 5 The LC-3. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 5-2 Instruction Set Architecture ISA.
CSC 3210 Computer Organization and Programming Chapter 2 SPARC Architecture Dr. Anu Bourgeois 1.
IT253: Computer Organization Lecture 4: Instruction Set Architecture Tonga Institute of Higher Education.
Presented by: Sergio Ospina Qing Gao. Contents ♦ 12.1 Processor Organization ♦ 12.2 Register Organization ♦ 12.3 Instruction Cycle ♦ 12.4 Instruction.
CSC 3210 Computer Organization and Programming Chapter 1 THE COMPUTER D.M. Rasanjalee Himali.
CSC 3210 Computer Organization and Programming Chapter 8 MACHINE INSTRUCTIONS D.M. Rasanjalee Himali.
CSC 3210 Computer Organization and Programming Chapter 2 SPARC Architecture Dr. Anu Bourgeois 1.
Chapter 10 The Assembly Process. What Assemblers Do Translates assembly language into machine code. Assigns addresses to all symbolic labels (variables.
Chapter 5 The LC Instruction Set Architecture ISA = All of the programmer-visible components and operations of the computer memory organization.
The LC-3. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 5-2 Instruction Set Architecture ISA = All of the.
Execution of an instruction
Natawut NupairojAssembly Language1 Control Structure.
by Richard P. Paul, 2nd edition, 2000.
CSC 3210 Computer Organization and Programming Chapter 2 SPARC ARCHITECTURE D.M. Rasanjalee Himali.
Computer Organization CS224 Fall 2012 Lessons 7 and 8.
1 The Instruction Set Architecture September 27 th, 2007 By: Corbin Johnson CS 146.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee Control Unit.
Chapter 2 SPARC Architecture Chinua Umoja 1.  SPARC is a load/store architecture  Registers used for all arithmetic and logical operations  32 registers.
SPARC Programming Model 24 “window” registers 8 global registers Control registers –Multiply step –PSR (status flags, etc.) –Trap Base register –Window.
1 What we want: execute High Level Language (HLL) programs What we have: computer hardware (a glorified calculator)
Deeper Assembly: Addressing, Conditions, Branching, and Loops
The Little man computer
Unit 1 Instruction set M.Brindha AP/EIE
central heating system
Assembly language.
MIPS Instruction Set Advantages
Chapter 15: Higher Level Constructs
Control Unit Lecture 6.
William Stallings Computer Organization and Architecture 8th Edition
ECE 3430 – Intro to Microcomputer Systems
ARM Registers Register – internal CPU hardware device that stores binary data; can be accessed much more rapidly than a location in RAM ARM has.
3.Instruction Set of 8085 Consists of 74 operation codes, e.g. MOV
The Cortex-M3/m4 Embedded Systems: Cortex-M3/M4 Instruction Sets
1. Introduction A microprocessor executes instructions given by the user Instructions should be in a language known to the microprocessor Microprocessor.
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
Chapter 7 Subroutines Dr. A.P. Preethy
Computer Science 210 Computer Organization
CS/COE0447 Computer Organization & Assembly Language
Chapter 5 The LC-3.
LC-3 Details and Examples
Instructions - Type and Format
Computer Science 210 Computer Organization
CSCE Fall 2013 Prof. Jennifer L. Welch.
ECE232: Hardware Organization and Design
CSCE 121: Simple Computer Model Spring 2015
Chapter 8 Central Processing Unit
Instruction encoding We’ve already seen some important aspects of processor design. A datapath contains an ALU, registers and memory. Programmers and compilers.
by Richard P. Paul, 2nd edition, 2000.
Unit 12 CPU Design & Programming
Computer Architecture
CSCE Fall 2012 Prof. Jennifer L. Welch.
Instruction Set Principles
ECE 352 Digital System Fundamentals
8051 ASSEMBLY LANGUAGE PROGRAMMING
Chapter 6 Programming the basic computer
MIPS assembly.
Computer Architecture
CS501 Advanced Computer Architecture
Branch & Call Chapter 4 Sepehr Naimi
An Introduction to the ARM CORTEX M0+ Instructions
Presentation transcript:

CSC 3210 Computer Organization and Programming Chapter 2 SPARC Architecture Dr. Anu Bourgeois

Introduction SPARC is a load/store architecture Registers used for all arithmetic and logical operations 32 registers available at a time Uses only load and store instructions to access memory

Registers Registers are accessed directly for rapid computation 32 registers – divided into 4 sets -- Global: %g0-%g7 -- Out: %o0 - %o7 -- In: %i0 - %i7 -- Local: %l0 - %l7 %g0 – always returns 0 %o6, %o7, %i6, %i7 – do not use Register size = 32 bits each

Table of Registers

SPARC Assembler SPARC assembler as: 2-pass assembler First pass: Updates location counter without paying attention to undefined labels for operands Defines label symbol to location counter Second pass: Values substituted in for labels Ignores labels followed by colons

Assembly Language Programs Programs are line based Use mnemonics which generate machine code upon assembling Statements may be labeled Comments: ! or /* … */ /* instructions to add and to subtract the contents of %o0 and %o1 */ start: add %o0, %o1, %l0 !l0=o0+o1 sub %o0, %o1, %l1 !l1=o0-o1

Psuedo-ops Statements that do not generate machine code e.g. Data defininitions, statements to provide the assembler information Generally start with a period a: .word 3 Can be labeled .global main main:

Compiling Code – 2 step process C compiler will call as and produce the object files Object files are the machine code Next calls the linker to combine .o files with library routines to produce the executable program – a.out

Compiling a C program %gcc -S program.c : produces the .s assembly language file %gcc expr.s –o expr : assembles the program and produces the executable file NOTE: You will only do this for the 1st assignment

Start of Execution C compiler expects to start execution at an address main The label must be at the first statement to execute and declared to be global .global main main: save %sp, -96, %sp save instruction provides space to save registers for the debugger

Macros If we have macros defined, then the program should be a .m file We can expand the macros to produce a .s file by running m4 first % m4 expr.m > expr.s % gcc expr.s –o expr

SPARC Instructions 3 operands: 2 source operands and 1 destination operand Source registers are unchanged Result stored in destination register Constants : -4096 ≤ c < 4096 op regrs1, regrs2, regrd op regrs1, imm, regrd

Sample Instructions clr regrd mov reg_or_imm, regrd Clears a register to zero mov reg_or_imm, regrd Copies content of source to destination add regrs1, reg_or_imm, regrd Adds oper1 + oper2  destination sub regrs1, reg_or_imm, regrd Subtracts oper1 - oper2  destination

Multiply and Divide No instruction available in SPARC Use function call instead Must use %o0 and %o1 for sources and %o0 holds result mov b, %o0 mov b, %o0 mov c, %o1 mov c, %o1 call .mul call .div a = b * c a = b ÷ c

Instruction Cycle Instruction cycle broken into 4 stages: Instruction fetch Fetch & decode instruction, obtain any operands, update PC Execute Execute arithmetic instruction, compute branch target address, compute memory address Memory access Access memory for load or store instruction; fetch instruction at target of branch instruction Store results Write instruction results back to register file

Pipelining SPARC is a RISC machine – want to complete one instruction per cycle Overlap stages of different instructions to achieve parallel execution Can obtain a speedup by a factor of 4 Hardware does not have to run 4 times faster – break h/w into 4 parts to run concurrently

Pipelining Sequential: each h/w stage idle 75% of the time. timeex = 4 * i Parallel: each h/w stage working after filling the pipeline. timeex = 3 + i

Data Dependencies – Load Delay Problem load [%o0], %o1 add %o1, %o2, %o2

Branch Delay Problem Branch target address not available until after execution of branch instruction Insert branch delay slot instruction

Branch delays Try to place an instruction after the branch that is useful – can also use nop The instruction following a branch instruction will always be fetched Updating the PC determines which instruction to fetch next

Determine if branch taken cmp bg mov ??? execute fetch cmp %l0, %l1 bg next mov %l2, %l3 sub %l3, 20, %l4 Condition true: branch to next Condition false: continue to sub F E M W F E M W F E M W F E M W Determine if branch taken Update if true Target  PC Fetch instruction from memory[PC] Obtain operands Update PC PC++

Actual SPARC Code: expr.m

Expanding Macros After running through m4: %m4 expr.m > expr.s Produce executable: %gcc expr.s – expr Execute file: %./expr

The Debugger – gdb Used to verify correctness, and find bugs Can also execute a program, stop execution at any point and single-step execution After assembling the program and placing the output into expr, launch gdb: %gdb expr To run code in gdb, type “r”: (gdb) r

gdb Commands Best way to learn is by practice Can be set at any address to stop execution in order to check status of program and registers To set a breakpoint at a label: (gdb) b main Breakpoint 1 at 0x106a8 (gdb) Typing “c” continues execution until it reaches the next breakpoint or end of code Can print contents of a register (gdb) p $l1 $2 = -8 Best way to learn is by practice

Filling Delay Slots The call instruction is called a delayed control transfer instruction : changes address from where future instructions will be fetched The following instruction is called a delayed instruction, and is located in the delay slot The delayed instruction is executed before the branch/call happens By using a nop for the delay slot – still wasting a cycle Instead, we may be able to move the instruction prior to the branch instruction into the delay slot.

Filling Delay Slots Move sub instructions to the delay slots to eliminate nop instructions .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system

Filling Delay Slots Executing the mov instruction, while fetching the sub instruction .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system EXECUTE  FETCH 

Filling Delay Slots Now executing the sub instruction, while fetching the call instruction .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system EXECUTE  FETCH 

Filling Delay Slots Now executing the call instruction, while fetching the sub instruction .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system Execution of call will update the PC to fetch from mul routine, but since sub was already fetched, it will be executed before any instruction from the mul routine EXECUTE  FETCH 

Filling Delay Slots Now executing the sub instruction, while fetching from the mul routine .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system …… .mul: save ….. EXECUTE  FETCH 

Filling Delay Slots Now executing the save instruction, while fetching the next instruction from the mul routine .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system …… .mul: save ….. EXECUTE  FETCH 

Filling Delay Slots While executing the last instruction of the mul routine, will come back to main and fetch the call .div instruction .global main main: save %sp, -96, %sp mov 9, %l0 !initialize x sub %l0, 1, %o0 !(x - 1) into %o0 call .mul sub %l0, 7, %o1 !(x - 7) into %o1 call .div sub %l0, 11, %o1 !(x - 11) into %o1, the divisor mov %o0, %l1 !store it in y mov 1, %g1 !trap dispatch ta 0 !trap to system …… .mul: save ….. At this point %o0 has the result from the multiply routine – this is the first operand for the divide routine FETCH  The subtract instruction will compute the 2nd operand before starting execution of the divide routine EXECUTE 

2.9 Branching 2.9.1 Testing Z zero whether the result was zero Instructions for testing and branching: 2.9.1 Testing The information about the state of execution of an instruction is saved in the following flags: Z zero whether the result was zero N negative whether the result was negative V overflow whether the result was too large for the register C carry whether the result generated a carry out Special add and sub instructions: ‘cc’ is appended to the mnemonic, and the instruction sets condition codes Z, N, V, and C to save the state of execution. E.g. addcc regrs1, reg_or_imm, regrd subcc regrs1, reg_or_imm, regrd

2.9.2 Branches Branch instructions are similar to call instructions. They will specify the label of the destination instruction. These too are delayed control transfer instructions. Branch instructions test the condition codes in order t determine if the branching condition exists: b_{icc} label where bicc stands for one of the branches testing the integer condition codes.

Table of signed number branches Assembler Mnemonic Unconditional Branches ba Branch always, goto bn Branch never Assembler Mnemonic Signed Arithmetic Branches bl Branch on less than zero ble Branch on less or equal to zero be Branch on equal to zero bne Branch on not equal to zero bge Branch on greater or equal to zero bg Branch on greater than zero

2.10 Control statements 2.10.1 While : The condition of a while loop is to be evaluated before the loop is executed, and if the condition is not met, the loop, including the first instruction of the loop, is not to be executed. Consider the C equivalent of the while loop: While ( a <= 17) { a = a += b; c++; }

Annulled conditional branches All conditional branches may be annulled, and if annulled, the delay instruction is executed when the branch is taken, but not if the branch is not taken. Note that the delay slot instruction is still fetched; it is just that its execution is ‘annulled, wasting a cycle. The flow chart of the annulled conditional branches is given in the next slide.

2.10.2 Do Consider a Do loop:

2.10.3 For For structure in C: For ( ex1; ex2;, ex3 ) st Express the above definition as: ex1; While ( ex2 ) { st ex3 }

Thus the translation of for (a=1; a<= b; a++) c *= a; would be:

2.10.4 If Then The statement following the relational expression is to be branched over if the condition is not true. To accomplish this, we need to logically complement the sense of the branch, following the relational expression evaluation, before the code for the statement. Table of complements of the branches Condition Complement bl bge ble bg be bne

For example, to translate

2.10.5 If Else An if-else statement allows us to do a letter with regard to filling the delay slot. Consider: If ((a+b) >= c) { a += b; c++; } else { a -= b; C--; } C += 10;

We will complement initial test to branch over and then code to the else code if the condition is false.

Annulled unconditional branch

Summary of gdb commands