Computer Architecture Instruction Set Architecture Lynn Choi Korea

  • Slides: 25
Download presentation
Computer Architecture Instruction Set Architecture Lynn Choi Korea University

Computer Architecture Instruction Set Architecture Lynn Choi Korea University

Machine Language Programming language High-level programming languages Procedural (imperative) languages: C, PASCAL, FORTRAN Object-oriented

Machine Language Programming language High-level programming languages Procedural (imperative) languages: C, PASCAL, FORTRAN Object-oriented languages: C++, Objective-C, Java Functional (declarative) languages: Lisp, Scheme Multiple paradigms (hybrid): Python, C# Assembly programming languages: symbolic machine languages Machine languages: binary (1’s and 0’s), IA 32, IA 64, ARM, MIPS, Power. PC Translator Compiler: translate a high-level language program into a machine language program Assembler: translate an assembly language program into a machine language program A part of a compiler Interpreter: translate and execute programs directly JVM(Java virtual machine): translate/execute Java bytecode to native machine instructions cf. Java compiler translate Java program to Java bytecode

Compiler A program that translates a source program (written in language A) into an

Compiler A program that translates a source program (written in language A) into an equivalent target program (written in language B) Source Program Compiler Target Program Source program Usually written in high-level programming languages (called source language) such as C, C++, Java, FORTRAN, Python Target program Usually written in machine languages (called target language) such as x 86, Alpha, MIPS, SPARC, or ARM instructions What qualities do you want in a compiler? Generate correct code Target code runs fast Compiler runs fast Support for separate compilation, good diagnostics for errors

Compilation Process Source program Preprocessor Expands macros and header files into the source program

Compilation Process Source program Preprocessor Expands macros and header files into the source program Expanded Source Program Compiler Assembly Program Assembler Relocatable code (object file) Linker Libraries, other relocatable object files Target program (executable file)

Compiler Phases Source Program Lexical Analyzer Tokens Front-End : language dependent Syntax Analyzer Tree

Compiler Phases Source Program Lexical Analyzer Tokens Front-End : language dependent Syntax Analyzer Tree Intermediate Code Generator I. C. Code Optimizer O. C. Target Code Generator I. C. : Intermediate Code O. C. : Optimized Code Back-End : machine dependent Object Program

Machine State ISA defines machine states and instructions Registers CPU internal storage to store

Machine State ISA defines machine states and instructions Registers CPU internal storage to store data fetched from memory Arithmetic and logic operations are performed on registers For example, MIPS ISA has 32 registers each of which contains 32 -bit data A register consists of 32 flip-flops Memory A large, single dimensional array, starting at address 0 Store program Program contains both instructions and data To transfer data Load from memory to register (Read) Store from register to memory (Write)

Data Size & Alignment Data size Word : the default data size for computation

Data Size & Alignment Data size Word : the default data size for computation 32 b for 32 b ISA, 64 b for 64 b ISA 32 bit processor has 32 bit integer ALU and 32 bit registers For 32 b ISA, 64 b data is called double word 16 b data is called half word Load/store instructions can specify size of data transferred Load word (default), load double word, load half word, load byte A single byte is the minimum size of data that can be transferred Byte addressability Each byte in memory has an address

Machine Instruction Machine instruction consists of two parts: an opcode and operands Opcode Specify

Machine Instruction Machine instruction consists of two parts: an opcode and operands Opcode Specify the operation to be performed For example, ADD, MULT, LOAD, STORE, JUMP Operands Specify input/output data and their locations Input data: source operands Output data: destination operands The location can be memory or register Memory operand specified by a memory address : ex) 8(R 2), x 1004 F Register operand specified by a register number : R 1

Instruction Types Arithmetic and logic instructions Performs actual computation on operands For example, ADD,

Instruction Types Arithmetic and logic instructions Performs actual computation on operands For example, ADD, MULT, XOR, SHIFT, FDIVIDE, FADD Data transfer instructions (also called memory instructions) Move data between memory and registers (LOAD, STORE) Input/Output instructions are usually implemented by memory instructions (memory-mapped IO) IO devices are mapped to memory address space Control transfer instructions (also called branch instructions) Determine the address of the next instruction to execute Change the program control flow (i. e. change the PC) Program Counter (PC): A special register that holds the address of the next instruction to execute Unconditional jumps and conditional branches Direct branches and indirect branches For example, JUMP, CALL, RETURN, BEQ

MIPS Instruction Format R-type 6 op 5 rs 5 rt 5 rd 5 shamt

MIPS Instruction Format R-type 6 op 5 rs 5 rt 5 rd 5 shamt Op: Opcode, basic operation of the instruction Rs: 1 st source register Rt: 2 nd source register Rd: destination register shamt: shift amount funct: function code, the specific variant of the opcode Used for arithmetic/logic instructions I-type 6 op 5 rs 5 rt 16 address Rs: base register Address: +/- 215 bytes offset (or also called displacement) Used for loads/stores and conditional branches 6 funct

MIPS Addressing Modes Register addressing Address is in a register jr $ra (indirect branches)

MIPS Addressing Modes Register addressing Address is in a register jr $ra (indirect branches) Base addressing Address is the sum of a register (base register) and a constant (offset) ldw $s 0, 100($s 1) Immediate addressing For constant operand (immediate operand) add $t 1, $t 2, 3 PC-relative addressing Address is the sum of PC and a constant (offset) beq $s 0, $s 1, L 1 Pseudodirect addressing Address is the 26 bit offset concatenated with the upper bits of PC j L 1

MIPS Instruction formats R-type 6 op 5 rs 5 rt 5 rd 5 shamt

MIPS Instruction formats R-type 6 op 5 rs 5 rt 5 rd 5 shamt 6 funct Arithmetic instructions I-type 6 op 5 rs 5 rt 16 address/immediate Data transfer, conditional branch, immediate format instructions J-type 6 op Jump instructions 26 address

MIPS Instruction Example: R-format MIPS Instruction: add $8, $9, $10 Decimal number per field

MIPS Instruction Example: R-format MIPS Instruction: add $8, $9, $10 Decimal number per field representation: 0 9 10 8 0 32 Binary number per field representation: 000000 01001 01010 01000 00000 100000 hex representation: decimal representation: 012 A 4020 hex 19, 546, 144 ten Called a Machine Language Instruction hex Elsevier Inc. All rights reserved

MIPS Instruction Opcode Table Elsevier Inc. All rights reserved

MIPS Instruction Opcode Table Elsevier Inc. All rights reserved

MIPS Instruction Examples Elsevier Inc. All rights reserved

MIPS Instruction Examples Elsevier Inc. All rights reserved

If Statement C code: if (i==j) f = g+h; else f = g-h; f,

If Statement C code: if (i==j) f = g+h; else f = g-h; f, g, h, i, j in $s 0, $s 1, $s 2, $s 3, $s 4 Compiled MIPS code: bne $s 3, $s 4, Else add $s 0, $s 1, $s 2 j Exit Else: sub $s 0, $s 1, $s 2 Exit: … # if (i != j) goto Else # f = g + h # f = g - h Assembler calculates addresses Chapter 2 — Instructions: Language of the Computer — 16

Counted Loop C code: sum = 0; for (i=1; i <= 10; i++) sum

Counted Loop C code: sum = 0; for (i=1; i <= 10; i++) sum = sum + i; sum in $s 3, i in $t 1 Compiled MIPS code: addi $s 3, $zero, 0 addi $t 1, $zero, 1 loop: add $s 3, $t 1 addi $t 1, 1 sle $t 2, $t 1, 10 bne $t 2, $zero, loop # # sum i = = 0 1 = sum + i i + 1 # if (i <= 10) goto loop Chapter 2 — Instructions: Language of the Computer — 17

While Loop C code: while (save[i] == k) i += 1; i in $s

While Loop C code: while (save[i] == k) i += 1; i in $s 3, k in $s 5, address of save in $s 6 Compiled MIPS code: Loop: sll add lw bne addi j Exit: … $t 1, $t 0, $s 3, Loop $s 3, 2 $t 1, $s 6 0($t 1) $s 5, Exit $s 3, 1 # t 0 = save[i] # if (save[i] != k)goto Exit # i = i + 1; Chapter 2 — Instructions: Language of the Computer — 18

Procedure Call & Return Steps of procedure call & return Place parameters in a

Procedure Call & Return Steps of procedure call & return Place parameters in a place where the callee can access $a 0 - $a 3: four argument registers Transfer control to the callee jal callee_address : jump and link instruction Put return address (PC+4) in $ra and jump to the callee Acquire the storage (stack frame) needed for the callee Perform the desired task Place the result value in a place where the caller can access $v 0 - $v 1: two value registers to return values Return control to the caller jr $ra

Stack frame (activation record) of a procedure Store variables local to a procedure Procedure’s

Stack frame (activation record) of a procedure Store variables local to a procedure Procedure’s saved registers Arguments, return address, saved registers, local variables Stack pointer : point to the top of the stack Frame pointer : point to the bottom of the top stack frame Elsevier Inc. All rights reserved

MIPS Memory Allocation Elsevier Inc. All rights reserved

MIPS Memory Allocation Elsevier Inc. All rights reserved

MIPS Register Convention Elsevier Inc. All rights reserved

MIPS Register Convention Elsevier Inc. All rights reserved

MIPS Example : Procedure int leaf_example (int g, int h, int i, int j)

MIPS Example : Procedure int leaf_example (int g, int h, int i, int j) { int f; f = (g + h) – ( i + j); return f; } Assembly code leaf_example: sub $sp, 8 sw $t 1, 4($sp) sw $t 0, 0($sp) add $t 0, $a 1 add $t 1, $a 2, $a 3 sub $v 0, $t 1 lw $t 0, 0($sp) lw $t 1, 4($sp) add $sp, 8 jr $ra Elsevier Inc. All rights reserved # save register $t 1, $t 0 onto stack # $t 0 = g + h # $t 1 = i + j # $v 0 = (g + h) – (i + j) # restore $t 0, $t 1 for caller

MIPS Example : Recursion int { fact (int n) if (n <2) return 1;

MIPS Example : Recursion int { fact (int n) if (n <2) return 1; else return n * fact (n – 1); } Assembly code fact: addi $sp, -8 sw $ra, 4($sp) sw $a 0, 0($sp) slt $t 0, $a 0, 2 beq $t 0, $zero, L 1 addi $v 0, $zero, 1 addi $sp, 8 jr $ra L 1: addi $a 0, -1 jal fact lw $a 0, 0($sp) lw $ra, 4($sp) addi $sp, 8 mul $v 0, $a 0, $v 0 jr $ra # adjust stack pointer for 2 items # save return address and argument n # if n < 2, then $t 0 = 1 # if n >=2, go to L 1 # return 1 # pop 2 items off stack # $a 0 = n - 1 # call fact(n – 1) # pop argument n and return address # pop 2 items off stack # return n * fact(n – 1)

Homework 4 Read Chapters 9, 8, 7

Homework 4 Read Chapters 9, 8, 7