Upload
pici-axel
View
215
Download
0
Tags:
Embed Size (px)
DESCRIPTION
basics of mips
Citation preview
Fall 2004 SYCS-401 Operating Systems
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
Opcode
(Instruction)
Operands
(“arguments”)
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
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.
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
Fall 2004 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 add, subtract, multiply, divide comparison
Logical instructions Branch and jump instructions
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, targetRegDestination Source + Target
Fall 2004 SYCS-401 Operating Systems
Arithmetic Instructions: Add Unsigned
ADDU destinationReg, sourceReg, targetRegDestination Source + Target
Fall 2004 SYCS-401 Operating Systems
Arithmetic Instructions: Add Immediate
ADDI destinationReg, sourceReg, targetRegDestination 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: Divide Registers
DIV 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, targetRegDestination Source < Target) ? 1 : 0
Fall 2004 SYCS-401 Operating Systems
Arithmetic Instructions: SLT Immediate
SLTI destinationReg, sourceReg, immediateDestination 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, targetRegDestination Source AND Target
Fall 2004 SYCS-401 Operating Systems
Arithmetic Instructions: Logical OR
OR destinationReg, sourceReg, targetRegDestination 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: JumpJ label
Jump to instruction at label
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’
Fall 2004 SYCS-401 Operating Systems
Jump Instructions: Jump & Link
Fall 2004 SYCS-401 Operating Systems
Branch Instructions: Branch on Equal
BEQ sourceRegister, targetRegister, labelIf (sourceRegister == targetRegister) go to instruction at ‘label’
Fall 2004 SYCS-401 Operating Systems
Branch Instructions: Branch if Equal to Zero
BEQZ sourceRegister, labelIf (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: Load Address
LA destinationRegister, addressdestinationRegister calculated address
Fall 2004 SYCS-401 Operating Systems
Data Transfer Instructions: Load Immediate
LI destinationRegister, immediatedestinationRegister immediate value
Fall 2004 SYCS-401 Operating Systems
Data Transfer Instructions: Move from HI
MFHI destinationRegisterdestinationRegister HI register
Fall 2004 SYCS-401 Operating Systems
Data Transfer Instructions: Load Byte
LB targetRegister, labelLoad targetRegister with the byte value at address “label”
Fall 2004 SYCS-401 Operating Systems
Data Transfer Instructions: Store Byte
SB targetRegister, labelStore low byte value in targetRegister at address “label”
Fall 2004 SYCS-401 Operating Systems
Data Transfer Instructions: Load Word
LW targetRegister, labelLoad targetRegister with the word value at address “label”
Fall 2004 SYCS-401 Operating Systems
Data Transfer Instructions: Move
MOVE destinationRegister, sourceRegisterdestinationRegister 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
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!”
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.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
Fall 2004 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) This is the address of the next
instruction, PC + 4. Unconditional (jump and link)
jal Conditional (branch and link)
b*al bgezal, bltzal, etc.
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
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 variables with local scope that are
destroyed once the procedure has completed
Fall 2004 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 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
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
Fall 2004 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/cod-appa.pdf
• For the R3000 instruction set
• http://www.xs4all.nl/~vhouten/mipsel/r3000-isa.html