Overview. Introduction to the MIPS ISA. MIPS ISA Overview. Overview (2)

Similar documents
Computer Architecture. The Language of the Machine

MIPS Instruction Set

Flow of Control -- Conditional branch instructions

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA MIPS ISA. In a CPU. (vonneumann) Processor Organization

EEM 486: Computer Architecture. Lecture 2. MIPS Instruction Set Architecture

Examples of branch instructions

ECE232: Hardware Organization and Design. Computer Organization - Previously covered

CISC 662 Graduate Computer Architecture. Lecture 4 - ISA

Reduced Instruction Set Computer (RISC)

M2 Instruction Set Architecture

Reduced Instruction Set Computer (RISC)

MIPS Instruction Reference

The MIPS Instruction Set Architecture

MIPS ISA. 1. Data and Address Size 8-, 16-, 32-, 64-bit 2. Which instructions does the processor support

SPIM Instruction Set

101 Assembly. ENGR 3410 Computer Architecture Mark L. Chang Fall 2009

MIPS History. ISA MIPS Registers

MIPS Reference Guide

Mark Redekopp, All rights reserved. EE 357 Unit 11 MIPS ISA

MIPS Instruction Format

Computer Architecture. MIPS Instruction Set Architecture

ECE 2035 Programming HW/SW Systems Fall problems, 7 pages Exam Two 23 October 2013

Chapter 2A Instructions: Language of the Computer

F. Appendix 6 MIPS Instruction Reference

MIPS%Assembly% E155%

Programming the processor

MIPS R-format Instructions. Representing Instructions. Hexadecimal. R-format Example. MIPS I-format Example. MIPS I-format Instructions

Chapter 2. Computer Abstractions and Technology. Lesson 4: MIPS (cont )

5/17/2012. Recap from Last Time. CSE 2021: Computer Organization. The RISC Philosophy. Levels of Programming. Stored Program Computers

Recap from Last Time. CSE 2021: Computer Organization. Levels of Programming. The RISC Philosophy 5/19/2011

Instructions: MIPS ISA. Chapter 2 Instructions: Language of the Computer 1

Assembly Programming

Lecture 2. Instructions: Language of the Computer (Chapter 2 of the textbook)

Computer Architecture

Chapter 2. Instructions: Language of the Computer. Adapted by Paulo Lopes

CSc 256 Midterm (green) Fall 2018

Mips Code Examples Peter Rounce

ECE 15B Computer Organization Spring 2010

Week 10: Assembly Programming

CSc 256 Midterm 2 Fall 2011

CSc 256 Midterm 2 Spring 2012

CPS311 - COMPUTER ORGANIZATION. A bit of history

ECE468 Computer Organization & Architecture. MIPS Instruction Set Architecture

CS3350B Computer Architecture MIPS Instruction Representation

MIPS Assembly Language. Today s Lecture

MACHINE LANGUAGE. To work with the machine, we need a translator.

Introduction to the MIPS. Lecture for CPSC 5155 Edward Bosworth, Ph.D. Computer Science Department Columbus State University

Computer Organization and Structure. Bing-Yu Chen National Taiwan University

Concocting an Instruction Set

ECE 2035 Programming HW/SW Systems Fall problems, 6 pages Exam Two 23 October Your Name (please print clearly) Signed.

Instructions: Language of the Computer

Today s Lecture. MIPS Assembly Language. Review: What Must be Specified? Review: A Program. Review: MIPS Instruction Formats

Introduction to MIPS Processor

ECE 2035 Programming HW/SW Systems Spring problems, 6 pages Exam Two 11 March Your Name (please print) total

ECE 2035 Programming HW/SW Systems Spring problems, 6 pages Exam One 4 February Your Name (please print clearly)

Q1: /30 Q2: /25 Q3: /45. Total: /100

ECE Exam I February 19 th, :00 pm 4:25pm

Branch Addressing. Jump Addressing. Target Addressing Example. The University of Adelaide, School of Computer Science 28 September 2015

COMPSCI 313 S Computer Organization. 7 MIPS Instruction Set

CENG3420 Lecture 03 Review

Compiling Techniques

CS 61c: Great Ideas in Computer Architecture

Course Administration

CSCI 402: Computer Architectures. Instructions: Language of the Computer (3) Fengguang Song Department of Computer & Information Science IUPUI.

Kernel Registers 0 1. Global Data Pointer. Stack Pointer. Frame Pointer. Return Address.

A General-Purpose Computer The von Neumann Model. Concocting an Instruction Set. Meaning of an Instruction. Anatomy of an Instruction

Question 0. Do not turn this page until you have received the signal to start. (Please fill out the identification section above) Good Luck!

ECE 2035 Programming HW/SW Systems Fall problems, 6 pages Exam One 19 September 2012

Instruction Set Architecture of. MIPS Processor. MIPS Processor. MIPS Registers (continued) MIPS Registers

Machine Language Instructions Introduction. Instructions Words of a language understood by machine. Instruction set Vocabulary of the machine

ENGN1640: Design of Computing Systems Topic 03: Instruction Set Architecture Design

ECE 2035 Programming HW/SW Systems Fall problems, 6 pages Exam One 22 September Your Name (please print clearly) Signed.

Review. Lecture #9 MIPS Logical & Shift Ops, and Instruction Representation I Logical Operators (1/3) Bitwise Operations

Arithmetic for Computers

Assembly Language. Prof. Dr. Antônio Augusto Fröhlich. Sep 2006

Thomas Polzer Institut für Technische Informatik

Instructions: Language of the Computer

Today s topics. MIPS operations and operands. MIPS arithmetic. CS/COE1541: Introduction to Computer Architecture. A Review of MIPS ISA.

Lec 10: Assembler. Announcements

ECE260: Fundamentals of Computer Engineering

A Processor. Kevin Walsh CS 3410, Spring 2010 Computer Science Cornell University. See: P&H Chapter , 4.1-3

Review: MIPS Organization

ECE 2035 Programming HW/SW Systems Fall problems, 6 pages Exam Two 21 October 2016

Mark Redekopp, All rights reserved. EE 352 Unit 3 MIPS ISA

Concocting an Instruction Set

EE 109 Unit 13 MIPS Instruction Set. Instruction Set Architecture (ISA) Components of an ISA INSTRUCTION SET OVERVIEW

EE108B Lecture 3. MIPS Assembly Language II

ECE 2035 A Programming Hw/Sw Systems Fall problems, 8 pages Final Exam 8 December 2014

Chapter 2: Instructions:

ece4750-parc-isa.txt

CS 4200/5200 Computer Architecture I

Chapter 2. Instructions: Language of the Computer. HW#1: 1.3 all, 1.4 all, 1.6.1, , , , , and Due date: one week.

Topic Notes: MIPS Instruction Set Architecture

We will study the MIPS assembly language as an exemplar of the concept.

CS222: MIPS Instruction Set

ECE260: Fundamentals of Computer Engineering

COMPUTER ORGANIZATION AND DESIGN

Computer Science 324 Computer Architecture Mount Holyoke College Fall Topic Notes: MIPS Instruction Set Architecture

ECE331: Hardware Organization and Design

Computer Organization and Structure. Bing-Yu Chen National Taiwan University

Transcription:

Introduction to the MIPS ISA Overview Remember that the machine only understands very basic instructions (machine instructions) It is the compiler s job to translate your high-level (e.g. C program) into machine instructions. In more detail (forgetting linking): Source program (foo.c) Compiler (cc -S foo.c) Assembly program (foo.s) Assembler (cc foo.s) Executable program (a.out) machine independent machine dependent this is where we start Assembly language is a thin veneer over machine language. 20 21 Overview (2) Think about a simple C program... int array[100]; void main () { int i; for (i=0; i<100; i++) array[i] = i; } What set of instructions (ISA) should the machine provide to execute it? What does your intuition tell you about trade-offs between the ISA and the size (length) of the resulting machine program? What kind of trade-offs exist between the ISA and the speed, cost, complexity of the hardware needed to execute the program? Tensions and contributing factors: ease of programming, ease of hardware design, program/memory size, compiler technology MIPS ISA Overview MIPS is a computer family : R2000/3000 (32-bit), R4000/4400 (64-bit) New entries include R8000 (scientific/graphics) and R10000 MIPS originated as a Stanford project: Microprocessor without Interlocked Pipe Stages H+P posit 4 principles of hardware design. Try to keep them in mind during our discussion of the MIPS ISA: 1. Simplicity favors regularity 2. Smaller is faster 3. Compromise 4. Make the common case fast 22 23

MIPS is a RISC RISC = Reduced (Regular/Restricted) Instruction Set Computer All arithmetic operations are of the form: R d <- R s op R t # the Rs are registers Important restriction: MIPS is a load store architecture: the ALU can only operate on registers Why? Basic operations (really only a few kinds) 1. Arithmetic (addition, substraction, etc) 2. Logical (and, or, xor, etc) 3. Comparison (less-than, greater-than, etc) 4. Control (branches, jumps, etc) 5. Memory access (load and store) All MIPS instructions are 32 bits long MIPS is a Load-Store Architecture Every operand of a MIPS instruction must be in a register (with some exceptions) Variables must be loaded into registers Results have to be stored back into memory Example C fragment... a = b + c; d = a + b;... would be translated into something like: Load b into register Rx Load c into register Ry Rz <- Rx + Ry Store Rz into a Rz <- Rz + Rx Store Rz into d 24 25 MIPS Registers Provides thirty-two, 32-bit registers, named $0, $1, $2.. $31 used for: integer arithmetic address calculations special-purpose functions defined by convention temporaries A 32-bit program counter (PC) Two 32-bit registers HI and LO used specifically for multiplication and division Thirty-two 32-bit registers $f0, $f1, $f2.. $f31 used for floating point arithmetic Other special-purpose registers (see later) Registers are part of the process state 32-bits 32-bits 31 0 31 0 r0 r1 HI LO PC f0 f1 r31 f31 26 27

MIPS Register Names and Conventions Register Name Function Comment $0 $1 $2-3 $4-7 $8-15 $16-23 $24-25 $26-27 $28 $29 $30 $31 zero $at $v0-v1 $a0-a3 $t0-t7 $s0-s7 $t8-t9 $k0-k1 $gp $sp $fp $ra Always 0 reserved for assembler expression eval./function return proc/funct call parameters volatile temporaries temporaries (saved across calls) volatile temporaries reserved kernel/os pointer to global data area stack pointer frame pointer proc/funct return address No-op on write don t use it! not saved on call saved on call not saved on call don t use them MIPS Information Units Data types and size: Byte Half-word (2 bytes) Word (4 bytes) Float (4 bytes, single precision format) Double (8 bytes, double precision format) Memory is byte addressable. A data type must start on an address divisible by its size (in bytes) The address of the data type is the address of its lowest byte (MIPS on DEC is little endian) 28 29 0 4 8 MIPS Addressing Byte, half-word, word addr 0 Byte, half-word addr 2 Byte addr 7 MIPS Instruction Types As we said earlier, there are very few basic operations : 1. Memory access (load and store) 2. Arithmetic (addition, substraction, etc) 3. Logical (and, or, xor, etc) 4. Comparison (less-than, greater-than, etc) 5. Control (branches, jumps, etc) We ll use the following notation when describing instructions: In MIPS (and most byte addressable machines) every word should start at an address divisable by 4. Why? rd: destination register (modified by instruction) rs: source register (read by instruction) rt: source/destination register (read or read+modified) immed: a 16-bit value 30 31

Running Example Let s translate this simple C program into MIPS assembly code: int x, y; void main() {... x = x + y; if (x==y) { x = x + 3; } x = x + y + 42;... } Load and Store Instructions Data is explicitly moved between memory and registers through load and store instructions. Each load or store must specify the memory address of the memory data to be read or written. Think of a MIPS address as a 32-bit, unsigned integer. Because a MIPS instruction is always 32 bits long, the address must be specified in a more compact way. We always use a base register to address memory The base register points somewhere in memory, and the instruction specifies the register number, and a 16-bit, signed offset A single base register can be used to access any byte within??? bytes from where it points in memory. 32 33 Load and Store Examples Load a word from memory: Arithmetic Instructions lw rt, offset(base) # rt <- memory[base+offset] Store a word into memory: sw rt, offset(base) # memory[base+offset] <- rt For smaller units (bytes, half-words) only the lower bits of a register are accessible. Also, for loads, you need to specify whether to sign or zero extend the data. lb rt, offset(base) # rt <- sign-extended byte lbu rt, offset(base) # rt <- zero-extended byte sb rt, offset(base) # store low order byte of rt ADD rd, rs, rt # rd <- rs + rt ADDI rt, rs, immed # rt <- rs + immed SUB rd, rs, rt # rd <- rs - rt Examples: ADD $8, $8, $10 # r8 <- r9 + r10 ADD $t0, $t1, $t2 # t0 <- t1 + t2 SUB $s0, $s0, $s1 # s0 <- s0 - s1 ADDI $t3, $t4, 5 # t3 <- t4 + 5 34 35

Multiply and Divide Instructions Multiplying two 32-bit numbers can yield a 64 bit number. Hence the use of HI and LO registers. Dividing two numbers yields a quotient and a remainder. MULT rs, rt # HI/LO <- rs * rt MULTU rs, rt # HI/LO <- rs * rt DIV rs, rt # LO <- rs/rt # HI <- rs rem rt DIVU rs, rt # LO <- rs/rt # HI <- rs rem rt If an operand is negative, the remainder is not specified by the MIPS architecture. Multiply and Divide Instructions (2) There are instructions to move between HI/LO registers. MFHI rd # rd <- HI MTHI rs # HI <- rs MFLO rd # rd <- LO MTLO rs # LO <- rs 36 37 Integer Arithmetic Numbers can be either signed or unsigned The above instructions all check for, and signal overflow should it occur. MIPS ISA provides instructions that don t care about overflows: ADDU ADDIU SUBU, etc. For add and subtract, the computation is the same for both, but the machine will signal an overflow when one occurs for signed numbers. Overflows in 2 s Complement Overflow occurs when the addition of two numbers of the same sign results in a sum of the opposite sign Overflow cannot occur when adding operands of different signs Example 1: Assume a 4-bit machine. Register 9 contains 7 and register 10 contains 3 What happens when we use ADD? ADDU? Example 2: Assume a 4-bit machine. Register 9 contains 7 and register 10 contains -3 What happens when we use ADD? ADDU? 38 39

Flow of Control: Conditional Branches You can compare on... equality or inequality of two registers comparison of register to zero (>, <, <=, >=)... and branch to a target that is a signed displacement (expressed in number of instructions [words not bytes!]) from the instruction following the branch. Branches (2) In assembly language, it s easiest to just use the target address (from the label), rather than trying to figure out the number of instructions. BEQ rs, rt, target # branch if rs == rt BNE rs, rt, target # branch if rs!= rt BGTZ rs, target # branch if rs > 0 BGEZ rs, target # branch if rs >= 0 BLTZ rs, target # branch if rs < 0 BLEZ rs, target # branch if rs <= 0 40 41 Comparison Between Registers What if you want to branch if R6 is greater than R7? We can use the SLT instruction: SLT rd, rs, rt # if rs<rt then rd <- 1 # else rd <- 0 SLTU rd, rs, rt # same, but rs,rt unsigned Example: Branch to L1 if $5 > $6 SLT $7, $6, $5 # $7 = 1, if $6 < $5 BNE $7, $0, L1 Jump Instructions Jump instructions allow for unconditional transfer of control: J target # go to specified target JR rs # jump to addr stored in rs Jump and link is used for procedure calls: JAL target # jump to target, $31 <- PC JALR rs, rd # jump to addr in rs # rd <- PC When calling a procedure, use JAL; to return, use JR $31 42 43

Logic Instructions Used to manipulate bits within words, set up masks, etc. AND rd, rs, rt # rd <- AND(rs, rt) ANDI rt, rs, immed # rt <- AND(rs, immed) OR rd, rs, rt ORI rt, rs, immed XOR rd, rs, rt XORI rt, rs, immed The immediate constant is limited to 16 bits To load a constant in the 16 upper bits of a register we use LUI: LUI rt, immed # rt<31,16> <- immed # rt<15,0> <- 0 Logic Instruction Examples 1. Turn on the bits in the low order byte of R6: ORI $6, $6, 0x00ff # set r6<7,0> to 1s 2. Turn off the bits in the low order byte of R6: LUI $5, 0xffff # set r5<31,16> to 1s ORI $5, 0xff00 # zero low order byte AND $6, $6, $5 # zap low order byte in R6 3. Flip the the bits in the high order byte of R6: (check this one) LUI $5, 0xff00 # 1s in upper byte ANDI $5, 0x0000 # 0s every where else XOR $6, $6, $5 # flip upper bits... 44 45 Shift Instructions Used to move bits around within registers. Logical shifts (zeros are shifted in from end). SLL rd, rt, shamt # rd = rt shifted left by # shamt SRL rd, rt, shamt # right shift Arithmetic shift right (sign extend from left) SRA rd, rt, shamt # rd = rt shifted right by # shamt, and sign extended shamt is a 5-bit shift amount Back to our example.data # start of data segment x:.word # data layout directive y:.word # allocate two words.text # start of text segment.globl main main: la $t0, x # t0 holds &x lw $t1, 0($t0) # t1 holds x la $t2, y # t2 holds &y lw $t3, 0($t2) # t3 holds y add $t1, $t1, $t3 # x = x+y sw $t1, 0($t0) bne $t1, $t3, L1 # if x == y add $t1, $t1, 3 # x = x+3 sw $t1, 0($t0) L1: addi $t4, $t3, 17 # t4 = y + 17 add $t1, $t1, $t4 sw $t1, 0($t0) 46 47

Discussion Note that we re going to great lengths to preserve the semantics of the original C program. We re storing back values to their memory locations immediately after computing them. Why might this be a good idea? Why might this be a bad idea? An optimized example We eliminated unnecessary stores...data # start of data segment x:.word # data layout directive y:.word # allocate two words.text # start of text segment.globl main main: la $t0, x # t0 holds &x lw $t1, 0($t0) # t1 holds x la $t2, y # t2 holds &y lw $t3, 0($t2) # t3 holds y add $t1, $t1, $t3 # x = x+y bne $t1, $t3, L1 # if x == y add $t1, $t1, 3 # x = x+3 L1: addi $t4, $t3, 17 # t4 = y + 17 add $t1, $t1, $t4 sw $t1, 0($t0) 48 49 #include <stdio.h> int array[100]; void main () { int i; for (i=0; i<100; i++) array[i] = i; } Example C Program Assembly Version (Hand coded).data # begin data segment array:.space 400 # allocate 400 bytes.text # begin code segment.globl main # entry point must be global main: move $t0, $0 # $t0 is used as counter la $t1, array # $t1 is pointer into array start: bge $t0, 100, exit# more than 99 iterations? sw $t0, 0($t1) # store zero into array addi $t0, $t0, 1 # increment counter addi $t1, $t1, 4 # increment pointer into array j start # goto top of loop exit: j $ra # return to caller of main... 50 51

Assembly Version (Compiler Generated).data array:.space 400 # the comments are obviously.text # NOT generated by the compiler!.globl main main: subu $sp, 8 # make room on stack sw $0, 4($sp) # i lives at 4($sp)... $32: #...initialize it to zero lw $14, 4($sp) # load i into $14 mul $15, $14, 4 # $15 is used as base reg sw $14, array($15) # store i into array[i] lw $24, 4($sp) # load i into $24 addu $25, $24, 1 # increment $24 sw $25, 4($sp) # store new val into i blt $25, 100, $32 # if i<100 goto top move $2, $0 # set $2 to 0 addu $sp, 8 # reset stack j $31.end main 52