Top Banner
Fall 2004 SYCS-401 Operating Systems Instruction Set Architecture An overview of MIPS R3000 assembly language
78
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: mips_101

Fall 2004 SYCS-401 Operating Systems

Instruction Set Architecture

An overview of MIPS R3000 assembly language

Page 2: mips_101

Fall 2004 SYCS-401 Operating Systems

Overview

Review of the concept of an Instruction SetArchitecture (ISA)

Understand the format of MIPS assembly source files

Be able to identify the registers of the R3000 and their purpose

Be able to understand the effects of a subset of instructions of the MIPS R3000 Instruction Set Architecture (ISA)

Page 3: mips_101

Fall 2004 SYCS-401 Operating Systems

Opcodes and Operands

add $a0, $t1, $t0

Opcode

(Instruction)

Operands

(“arguments”)

Page 4: mips_101

Fall 2004 SYCS-401 Operating Systems

Simple Assembler Program.globl main

.text

main: # Program starts here.

li $t0, 5 # Load the integer value 5

# into register t0

li $t1, 19 # Load 19 into register t1

add $t2, $t1, $t0 # Add registers t0 and t1

# to produce t2

li $v0, 1 # Setup a print integer call

# to print the result

move $a0, $t2

syscall

li $v0, 10 # Setup an exit call

syscall # Do the exit thing

Add the integers 5 and 19, and print the result. 8

Page 5: mips_101

Fall 2004 SYCS-401 Operating Systems

Instruction Set Architecture (ISA) Think of the ISA as the hardware/software

interface In this lecture we look at some aspects of

MIPS ISA, including:

Some opcodes Required operands

there are no implicit operands in MIPS Means of accessing RAM Number of registers Instruction format etc., etc.

Page 6: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS: ISA generations (‘I’ to ‘IV’)

MIPS I (8 MHz, 32b architecture) R2000 (first commercial MIPS processor)

MIPS II (40 MHz, 32b architecture) R3000

MIPS III (to 250 MHz pipeline, 64b architecture) R4x00

MIPS IV R8000 R10000 R5000

Page 7: mips_101

Fall 2004 SYCS-401 Operating Systems

Page 8: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS Registers

Page 9: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 10: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 11: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 12: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 13: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 14: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 15: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 16: mips_101

Fall 2004 SYCS-401 Operating Systems

General-Purpose Registers

Page 17: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS opcode formats

Page 18: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS Instruction Categories

Arithmetic instructions add, subtract, multiply, divide comparison

Logical instructions Branch and jump instructions

conditional (branch) unconditional (jump)

Data transfer (load & store) instructions

Page 19: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions

add subtract multiply divide compare shift / rotate

not covered here

Page 20: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Add Registers

ADD destinationReg, sourceReg, targetRegDestination Source + Target

Page 21: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Add Unsigned

ADDU destinationReg, sourceReg, targetRegDestination Source + Target

Page 22: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Add Immediate

ADDI destinationReg, sourceReg, targetRegDestination Source + Target

Page 23: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS Opcode Map

Page 24: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS Opcode Map

Page 25: mips_101

Fall 2004 SYCS-401 Operating Systems

MIPS System Calls (syscall)

Page 26: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Divide Registers

DIV sourceReg, targetReg$lo (quotient), $hi (remainder) Source / Target

Page 27: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Multiply Registers

MUL sourceReg, targetReg$lo (low word), $hi (high word) Source x Target

Page 28: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Set if Less Than

SLT destinationReg, sourceReg, targetRegDestination Source < Target) ? 1 : 0

Page 29: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: SLT Immediate

SLTI destinationReg, sourceReg, immediateDestination Source < immediate) ? 1 : 0

Page 30: mips_101

Fall 2004 SYCS-401 Operating Systems

Some other arithmetic instructions

Page 31: mips_101

Fall 2004 SYCS-401 Operating Systems

Logical Instructions

• Logical AND

• logical OR

• XOR

• NOT

Page 32: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Logical AND

AND destinationReg, sourceReg, targetRegDestination Source AND Target

Page 33: mips_101

Fall 2004 SYCS-401 Operating Systems

Arithmetic Instructions: Logical OR

OR destinationReg, sourceReg, targetRegDestination Source OR Target

Page 34: mips_101

Fall 2004 SYCS-401 Operating Systems

Some other Logical instructions

Page 35: mips_101

Fall 2004 SYCS-401 Operating Systems

Branch and Jump Instructions

•These alter the (otherwise) linear flow of control.

•There are two main types of “go to” instruction

•unconditional ( always go to … )

> jump

•conditional ( if … then go to … )

> branch (indicating an alternative flow)

Page 36: mips_101

Fall 2004 SYCS-401 Operating Systems

Branch and Jump Instructions

Page 37: mips_101

Fall 2004 SYCS-401 Operating Systems

Jump Instructions: JumpJ label

Jump to instruction at label

Page 38: mips_101

Fall 2004 SYCS-401 Operating Systems

Jump Instructions: Jump & Link

JAL labelPlace the address of the next instruction (PC + 4) in $ra. Jump to the instruction

at ‘label’

Page 39: mips_101

Fall 2004 SYCS-401 Operating Systems

Jump Instructions: Jump & Link

Page 40: mips_101

Fall 2004 SYCS-401 Operating Systems

Branch Instructions: Branch on Equal

BEQ sourceRegister, targetRegister, labelIf (sourceRegister == targetRegister) go to instruction at ‘label’

Page 41: mips_101

Fall 2004 SYCS-401 Operating Systems

Branch Instructions: Branch if Equal to Zero

BEQZ sourceRegister, labelIf (sourceRegister == 0) go to instruction at ‘label’

Page 42: mips_101

Fall 2004 SYCS-401 Operating Systems

Some other Jump/Branch instructions

Page 43: mips_101

Fall 2004 SYCS-401 Operating Systems

Data transfer instructions MIPS is a load-and-store architecture

The only instructions that access RAM are those\

which load to (or store from) registers Note that all other instructions operate on

registers To change a value in memory, you must

therefore: load it to a register alter it store it back in memory

Page 44: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Load Address

LA destinationRegister, addressdestinationRegister calculated address

Page 45: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Load Immediate

LI destinationRegister, immediatedestinationRegister immediate value

Page 46: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Move from HI

MFHI destinationRegisterdestinationRegister HI register

Page 47: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Load Byte

LB targetRegister, labelLoad targetRegister with the byte value at address “label”

Page 48: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Store Byte

SB targetRegister, labelStore low byte value in targetRegister at address “label”

Page 49: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Load Word

LW targetRegister, labelLoad targetRegister with the word value at address “label”

Page 50: mips_101

Fall 2004 SYCS-401 Operating Systems

Data Transfer Instructions: Move

MOVE destinationRegister, sourceRegisterdestinationRegister sourceRegister

Page 51: mips_101

Fall 2004 SYCS-401 Operating Systems

Some other Data Transfer instructions

Page 52: mips_101

Fall 2004 SYCS-401 Operating Systems

Assembler directives: Examples

Page 53: mips_101

Fall 2004 SYCS-401 Operating Systems

Template.s

Page 54: mips_101

Fall 2004 SYCS-401 Operating Systems

Example.s

Page 55: mips_101

Fall 2004 SYCS-401 Operating Systems

Assembler Syntax Comments

begin with a ‘#’ and continue to the end of the line

Identifiers identifier { a-z A-Z _ . } { a-z A-Z _ . 0-

9 }* Label declaration (follow by a colon)

identifier: Strings (use double quotes; special

characters use backslash) “ \t \“Hello World\” is \nthe usual example!”

Page 56: mips_101

Fall 2004 SYCS-401 Operating Systems

High Level Language Constructs

How do we code if-then, if-then-else, while, do-while, for, and switch statements.

Examples: Assume The existence of a 32b integer

(labeled ‘x’) is assumed: .data

x: .word 0

Page 57: mips_101

Fall 2004 SYCS-401 Operating Systems

If Construct

Page 58: mips_101

Fall 2004 SYCS-401 Operating Systems

If Construct

Page 59: mips_101

Fall 2004 SYCS-401 Operating Systems

If Construct

Page 60: mips_101

Fall 2004 SYCS-401 Operating Systems

Post-Test Loop

Page 61: mips_101

Fall 2004 SYCS-401 Operating Systems

Post-Test Loop

Page 62: mips_101

Fall 2004 SYCS-401 Operating Systems

Simple Assembler Program.globl main

.text

main: # Program starts here.

li $t0, 5 # Load the integer value 5

# into register t0

li $t2, $a0 # set t2 = 0

start:

bltz $t0, done # if t0 <= 0 then goto done

add $t2, $t2, $t0 # Add registers t0 and t1

# to produce t2

subi $t0, t0, 1 # t0 = t0 - 1

j start

done:

li $v0, 1 # Setup a print integer call

# to print the result

move $a0, $t2

syscall

li $v0, 10 # Setup an exit call

syscall # Do the exit thing

Page 63: mips_101

Fall 2004 SYCS-401 Operating Systems

Assembly vs. High-Level Languages (HLLs)

Page 64: mips_101

Fall 2004 SYCS-401 Operating Systems

Producing an Executable

Page 65: mips_101

Fall 2004 SYCS-401 Operating Systems

Procedure Calls

The terminology tends to be rather loose.

One view: functions return values whereas

procedures do not Here the terms are used

interchangeably

Page 66: mips_101

Fall 2004 SYCS-401 Operating Systems

Link Instructions Link instructions leave a return

address on register $ra (31) This is the address of the next

instruction, PC + 4. Unconditional (jump and link)

jal Conditional (branch and link)

b*al bgezal, bltzal, etc.

Page 67: mips_101

Fall 2004 SYCS-401 Operating Systems

Returning from a procedure

There is a “jump register” instruction that jumps to the address held in the specified register

Typical use: jr $ra

Note, however, that the specified register does not need to be $ra

Page 68: mips_101

Fall 2004 SYCS-401 Operating Systems

Procedure Calls

Page 69: mips_101

Fall 2004 SYCS-401 Operating Systems

Passing function arguments

Recall the register conventions that MIPS uses

$a0 - $a3 are used for passing arguments Arguments must be simple There is a limit of 4 by this convention

Greater demands than these are met by use of the stack

Page 70: mips_101

Fall 2004 SYCS-401 Operating Systems

Returning values

Register conventions also specify that registers $v0 - $v1 may be used for returning values from a function

Similar constraints apply to argument-passing

Page 71: mips_101

Fall 2004 SYCS-401 Operating Systems

The Stack

Page 72: mips_101

Fall 2004 SYCS-401 Operating Systems

Uses of the stack

Save registers that are meant to be preserved by the calling code.

Pass complex arguments to a procedure

Use for local variables variables with local scope that are

destroyed once the procedure has completed

Page 73: mips_101

Fall 2004 SYCS-401 Operating Systems

Procedure Call Conceptually

Page 74: mips_101

Fall 2004 SYCS-401 Operating Systems

Caller Template(Calling the function) Pass arguments to the function

first 4 arguments use registers $a0 - $a3

more arguments must use the stack Save any important values that are

held in temporary registers Execute jump/branch and link

instruction

Page 75: mips_101

Fall 2004 SYCS-401 Operating Systems

Called template (Start)

•Make room on the stack subi $sp, $sp, <bytes>

Why subtraction? Store any registers of interest

$ra if your routine makes a function call

Why? Any $s0-$s7 registers that will be used

Page 76: mips_101

Fall 2004 SYCS-401 Operating Systems

Called template (Finish)

Make returned values available Put in $v0, $v1

Restore any registers that were saved $ra, $s0-$s7

Pop the stack addi $sp, $sp, <bytes>

Return jr $ra

Page 77: mips_101

Fall 2004 SYCS-401 Operating Systems

Caller template (Returning from the function) Handle results, if any

registers $v0, $v1 Restore saved values, if any

Page 78: mips_101

Fall 2004 SYCS-401 Operating Systems

Sources•Indigo image and specs

•http://www.sgi.com

•For the R2000 instruction set

•Patterson, D.A., & Hennesy, J.L., (1994). “ComputerOrganization and Design: The Hardware / Software Interface”, Morgan Kaufmann. (Appendix A)

•Available online at:

• http://www.cs.wisc.edu/~larus/SPIM/cod-appa.pdf

• For the R3000 instruction set

• http://www.xs4all.nl/~vhouten/mipsel/r3000-isa.html