Transcript Fall 2003

Instruction Set Architecture
An overview of MIPS R3000
assembly language
Fall 2003
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 2003
SYCS-401 Operating Systems
Opcodes and Operands
add $a0, $t1, $t0
Operands
Opcode
(“arguments”)
(Instruction)
Fall 2003
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
add
$t1, 19 # Load 19 into register t1
$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
syscall
$v0, 10
# Setup an exit call
# Do the exit thing
Add the integers 5 and 19, and print the result. 8
Fall 2003
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 2003
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 2003
R8000
R10000
R5000
SYCS-401 Operating Systems
Fall 2003
SYCS-401 Operating Systems
MIPS Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
General-Purpose Registers
Fall 2003
SYCS-401 Operating Systems
MIPS opcode formats
Fall 2003
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 2003
SYCS-401 Operating Systems
Arithmetic Instructions






add
subtract
multiply
divide
compare
shift / rotate

not covered here
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions: Add
Registers
ADD destinationReg, sourceReg, targetReg
Destination Source + Target
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions: Add
Unsigned
ADDU destinationReg, sourceReg, targetReg
Destination Source + Target
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions: Add
Immediate
ADDI destinationReg, sourceReg, target
Destination Source + Target
Fall 2003
SYCS-401 Operating Systems
MIPS Opcode Map
Fall 2003
SYCS-401 Operating Systems
MIPS Opcode Map
Fall 2003
SYCS-401 Operating Systems
MIPS System Calls (syscall)
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions: Divide
Registers
DIV sourceReg, targetReg
$lo (quotient), $hi (remainder) Source / Target
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions:
Multiply Registers
MUL sourceReg, targetReg
$lo (low word), $hi (high word) Source x
Target
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions: Set if
Less Than
SLT destinationReg, sourceReg, targetReg
Destination Source < Target) ? 1 : 0
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions:
SLT Immediate
SLTI destinationReg, sourceReg, immediate
Destination Source < immediate) ? 1 : 0
Fall 2003
SYCS-401 Operating Systems
Some other arithmetic
instructions
Fall 2003
SYCS-401 Operating Systems
Logical Instructions
• Logical AND
• logical OR
• XOR
• NOT
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions:
Logical AND
AND destinationReg, sourceReg, targetReg
Destination Source AND Target
Fall 2003
SYCS-401 Operating Systems
Arithmetic Instructions:
Logical OR
OR destinationReg, sourceReg, targetReg
Destination Source OR Target
Fall 2003
SYCS-401 Operating Systems
Some other Logical
instructions
Fall 2003
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 2003
SYCS-401 Operating Systems
Branch and Jump Instructions
Fall 2003
SYCS-401 Operating Systems
Jump Instructions: Jump
J label
Jump to instruction at label
Fall 2003
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 2003
SYCS-401 Operating Systems
Jump Instructions: Jump &
Link
Fall 2003
SYCS-401 Operating Systems
Branch Instructions: Branch
on Equal
BEQ sourceRegister, targetRegister,
label
If (sourceRegister == targetRegister)
go to instruction at ‘label’
Fall 2003
SYCS-401 Operating Systems
Branch Instructions: Branch if
Equal to Zero
BEQZ sourceRegister, label
If (sourceRegister == 0)
go to instruction at ‘label’
Fall 2003
SYCS-401 Operating Systems
Some other Jump/Branch
instructions
Fall 2003
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 2003
SYCS-401 Operating Systems
Data Transfer Instructions:
Load Address
LA destinationRegister, address
destinationRegister calculated address

Fall 2003
pseudo-instruction
SYCS-401 Operating Systems
Data Transfer Instructions:
Load Immediate
LI destinationRegister, immediate
destinationRegister immediate value
Fall 2003
SYCS-401 Operating Systems
Data Transfer Instructions:
Move from HI
MFHI destinationRegister
destinationRegister HI register
Fall 2003
SYCS-401 Operating Systems
Data Transfer Instructions:
Load Byte
LB targetRegister, label
Load targetRegister with the byte value at address
“label”
Fall 2003
SYCS-401 Operating Systems
Data Transfer Instructions:
Store Byte
SB targetRegister, label
Store low byte value in targetRegister at address
“label”
Fall 2003
SYCS-401 Operating Systems
Data Transfer Instructions:
Load Word
LW targetRegister, label
Load targetRegister with the word value at address
“label”
Fall 2003
SYCS-401 Operating Systems
Data Transfer Instructions:
Move
MOVE destinationRegister, sourceRegister
destinationRegister sourceRegister
Fall 2003
SYCS-401 Operating Systems
Some other Data Transfer
instructions
Fall 2003
SYCS-401 Operating Systems
Assembler directives:
Examples
Fall 2003
SYCS-401 Operating Systems
Template.s
Fall 2003
SYCS-401 Operating Systems
Example.s
Fall 2003
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 2003
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
(labelled ‘x’) is assumed:
.data
Fall 2003
SYCS-401 Operating Systems
x:
If Construct
Fall 2003
SYCS-401 Operating Systems
If Construct
Fall 2003
SYCS-401 Operating Systems
If Construct
Fall 2003
SYCS-401 Operating Systems
Post-Test Loop
Fall 2003
SYCS-401 Operating Systems
Post-Test Loop
Fall 2003
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:
bgtz
$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
Fall 2003
li
SYCS-401
Operating
$v0,
10
# Setup Systems
an exit call
Assembly vs. High-Level
Languages (HLLs)
Fall 2003
SYCS-401 Operating Systems
Producing an Executable
Fall 2003
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 2003
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,
jalr
Conditional (branch and link)

b*al

Fall 2003
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 2003
SYCS-401 Operating Systems
Procedure Calls
Fall 2003
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 2003
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 argumentpassing
Fall 2003
SYCS-401 Operating Systems
The Stack
Fall 2003
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 2003
variables with local scope that are
destroyed once the procedure has
completed
SYCS-401 Operating Systems
Procedure Call Conceptually
Fall 2003
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 2003
SYCS-401 Operating Systems
Called template (Start)
•Make room on the stack



Why subtraction?
Store any registers of interest


$ra if your routine makes a function call
Why?


subi $sp, $sp, <bytes>
Any $s0-$s7 registers that will be used
Why?
Fall 2003
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 2003
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 2003
SYCS-401 Operating Systems
Example.s
Fall 2003
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
Fall 2003
SYCS-401 Operating Systems