Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 78

Instruction Set Architecture

An overview of MIPS R3000


assembly language

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)
Fall 2004

SYCS-401 Operating Systems

Opcodes and Operands

add $a0, $t1, $t0


Operands
Opcode

(arguments)

(Instruction)

Fall 2004

SYCS-401 Operating Systems

Simple Assembler Program


.globlmain
.text
main:

#Programstartshere.
li$t0,5 #Loadtheintegervalue5
#intoregistert0
li$t1,19 #Load19intoregistert1
add$t2,$t1,$t0#Addregisterst0andt1
#toproducet2
li$v0,1 #Setupaprintintegercall
#toprinttheresult
move$a0,$t2
syscall
li$v0,10 #Setupanexitcall
syscall

#Dotheexitthing

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


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

Fall 2004

there are no implicit operands in MIPS

Means of accessing RAM


Number of registers
Instruction format
etc., etc.
SYCS-401 Operating Systems

MIPS: ISA generations (I to


IV)

MIPS I (8 MHz, 32b architecture)

MIPS II (40 MHz, 32b architecture)

R3000

MIPS III (to 250 MHz pipeline, 64b


architecture)

R2000 (first commercial MIPS processor)

R4x00

MIPS IV

Fall 2004

R8000
R10000
R5000
SYCS-401 Operating Systems

Fall 2004

SYCS-401 Operating Systems

MIPS Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

General-Purpose Registers

Fall 2004

SYCS-401 Operating Systems

MIPS opcode formats

Fall 2004

SYCS-401 Operating Systems

MIPS Instruction
Categories

Arithmetic instructions

Logical instructions
Branch and jump instructions

add, subtract, multiply, divide comparison

conditional (branch)
unconditional (jump)

Data transfer (load & store)


instructions

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions

add
subtract
multiply
divide
compare
shift / rotate

not covered here

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Add
Registers
ADD destinationReg, sourceReg, targetReg
Destination Source + Target

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Add
Unsigned
ADDU destinationReg, sourceReg, targetReg
Destination Source + Target

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Add
Immediate
ADDI destinationReg, sourceReg, targetReg
Destination Source + Target

Fall 2004

SYCS-401 Operating Systems

MIPS Opcode Map

Fall 2004

SYCS-401 Operating Systems

MIPS Opcode Map

Fall 2004

SYCS-401 Operating Systems

MIPS System Calls (syscall)

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
DivideDIVRegisters
sourceReg, targetReg
$lo (quotient), $hi (remainder) Source / Target

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Multiply
Registers
MUL sourceReg, targetReg
$lo (low word), $hi (high word) Source x Target

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Set
if Less Than
SLT destinationReg, sourceReg, targetReg
Destination Source < Target) ? 1 : 0

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
SLT
Immediate
SLTI destinationReg, sourceReg, immediate
Destination Source < immediate) ? 1 : 0

Fall 2004

SYCS-401 Operating Systems

Some other arithmetic


instructions

Fall 2004

SYCS-401 Operating Systems

Logical Instructions
Logical AND
logical OR
XOR
NOT

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Logical
AND
AND destinationReg, sourceReg, targetReg
Destination Source AND Target

Fall 2004

SYCS-401 Operating Systems

Arithmetic Instructions:
Logical
OR
OR destinationReg, sourceReg, targetReg
Destination Source OR Target

Fall 2004

SYCS-401 Operating Systems

Some other Logical


instructions

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)

Fall 2004

SYCS-401 Operating Systems

Branch and Jump


Instructions

Fall 2004

SYCS-401 Operating Systems

Jump Instructions: Jump


J label
Jump to instruction at label

Fall 2004

SYCS-401 Operating Systems

Jump Instructions: Jump &


Link

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

Fall 2004

SYCS-401 Operating Systems

Jump Instructions: Jump &


Link

Fall 2004

SYCS-401 Operating Systems

Branch Instructions:
Branch on Equal

BEQ sourceRegister, targetRegister, label


If (sourceRegister == targetRegister)
go to instruction at label

Fall 2004

SYCS-401 Operating Systems

Branch Instructions:
Branch if Equal to Zero

BEQZ sourceRegister, label


If (sourceRegister == 0)
go to instruction at label

Fall 2004

SYCS-401 Operating Systems

Some other Jump/Branch


instructions

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
Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


LoadLAAddress
destinationRegister, address
destinationRegister calculated address

Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


LoadLI Immediate
destinationRegister, immediate
destinationRegister immediate value

Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


Move from
HI
MFHI destinationRegister
destinationRegister HI register

Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


Load Byte
LB targetRegister, label
Load targetRegister with the byte value at address label

Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


StoreSBByte
targetRegister, label
Store low byte value in targetRegister at address label

Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


Load LW
Word
targetRegister, label
Load targetRegister with the word value at address label

Fall 2004

SYCS-401 Operating Systems

Data Transfer Instructions:


Move
MOVE destinationRegister, sourceRegister
destinationRegister sourceRegister

Fall 2004

SYCS-401 Operating Systems

Some other Data Transfer


instructions

Fall 2004

SYCS-401 Operating Systems

Assembler directives:
Examples

Fall 2004

SYCS-401 Operating Systems

Template.s

Fall 2004

SYCS-401 Operating Systems

Example.s

Fall 2004

SYCS-401 Operating Systems

Assembler Syntax

Comments

Identifiers

identifier { a-z A-Z _ . } { a-z A-Z _ . 0-9 }*

Label declaration (follow by a colon)

begin with a # and continue to the end of the


line

identifier:

Strings (use double quotes; special


characters use backslash)

\t \Hello World\ is \nthe usual example!

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
Fall 2004

SYCS-401 Operating Systems

If Construct

Fall 2004

SYCS-401 Operating Systems

If Construct

Fall 2004

SYCS-401 Operating Systems

If Construct

Fall 2004

SYCS-401 Operating Systems

Post-Test Loop

Fall 2004

SYCS-401 Operating Systems

Post-Test Loop

Fall 2004

SYCS-401 Operating Systems

Simple Assembler Program


.globlmain
.text
main:

#Programstartshere.
li$t0,5

#Loadtheintegervalue5
#intoregistert0

li$t2,$a0

#sett2=0

bltz$t0,done

#ift0<=0thengotodone

start:

add$t2,$t2,$t0#Addregisterst0andt1
#toproducet2
subi$t0,t0,1 #t0=t01

jstart
done:
li$v0,1

#Setupaprintintegercall
#toprinttheresult

move$a0,$t2
syscall

Fall 2004

li$v0,10

#Setupanexitcall

syscall

#Dotheexitthing

SYCS-401 Operating Systems

Assembly vs. High-Level


Languages (HLLs)

Fall 2004

SYCS-401 Operating Systems

Producing an Executable

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

Fall 2004

SYCS-401 Operating Systems

Link Instructions

Link instructions leave a return


address on register $ra (31)

Unconditional (jump and link)

This is the address of the next


instruction, PC + 4.
jal

Conditional (branch and link)

b*al

Fall 2004

bgezal, bltzal, etc.


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

Fall 2004

SYCS-401 Operating Systems

Procedure Calls

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

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

Fall 2004

SYCS-401 Operating Systems

The Stack

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

Fall 2004

variables with local scope that are


destroyed once the procedure has
completed
SYCS-401 Operating Systems

Procedure Call
Conceptually

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

Fall 2004

SYCS-401 Operating Systems

Called template (Start)


Make room on the stack

Why subtraction?
Store any registers of interest

subi $sp, $sp, <bytes>

$ra if your routine makes a function


call

Why?

Fall 2004

Any $s0-$s7 registers that will be used


SYCS-401 Operating Systems

Called template (Finish)

Make returned values available

Restore any registers that were saved

$ra, $s0-$s7

Pop the stack

Put in $v0, $v1

addi $sp, $sp, <bytes>

Return

Fall 2004

jr $ra
SYCS-401 Operating Systems

Caller template (Returning


from
the
function)

Handle results, if any

registers $v0, $v1

Restore saved values, if any

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/codappa.pdf
Fall
For
the R3000 instruction
set
2004
SYCS-401 Operating Systems

You might also like