Download presentation
Presentation is loading. Please wait.
1
Fall 2003SYCS-401 Operating Systems Instruction Set Architecture An overview of MIPS R3000 assembly language
2
Fall 2003SYCS-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)
3
Fall 2003SYCS-401 Operating Systems Opcodes and Operands add $a0, $t1, $t0 Opcode (Instruction) Operands (“arguments”)
4
Fall 2003SYCS-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
5
Fall 2003SYCS-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.
6
Fall 2003SYCS-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
7
Fall 2003SYCS-401 Operating Systems
8
Fall 2003SYCS-401 Operating Systems MIPS Registers
9
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
10
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
11
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
12
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
13
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
14
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
15
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
16
Fall 2003SYCS-401 Operating Systems General-Purpose Registers
17
Fall 2003SYCS-401 Operating Systems MIPS opcode formats
18
Fall 2003SYCS-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
19
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions add subtract multiply divide compare shift / rotate not covered here
20
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Add Registers ADD destinationReg, sourceReg, targetReg Destination Source + Target
21
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Add Unsigned ADDU destinationReg, sourceReg, targetReg Destination Source + Target
22
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Add Immediate ADDI destinationReg, sourceReg, targetReg Destination Source + Target
23
Fall 2003SYCS-401 Operating Systems MIPS Opcode Map
24
Fall 2003SYCS-401 Operating Systems MIPS Opcode Map
25
Fall 2003SYCS-401 Operating Systems MIPS System Calls ( syscall )
26
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Divide Registers DIV sourceReg, targetReg $lo (quotient), $hi (remainder) Source / Target
27
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Multiply Registers MUL sourceReg, targetReg $lo (low word), $hi (high word) Source x Target
28
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Set if Less Than SLT destinationReg, sourceReg, targetReg Destination Source < Target) ? 1 : 0
29
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: SLT Immediate SLTI destinationReg, sourceReg, immediate Destination Source < immediate) ? 1 : 0
30
Fall 2003SYCS-401 Operating Systems Some other arithmetic instructions
31
Fall 2003SYCS-401 Operating Systems Logical Instructions Logical AND logical OR XOR NOT
32
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Logical AND AND destinationReg, sourceReg, targetReg Destination Source AND Target
33
Fall 2003SYCS-401 Operating Systems Arithmetic Instructions: Logical OR OR destinationReg, sourceReg, targetReg Destination Source OR Target
34
Fall 2003SYCS-401 Operating Systems Some other Logical instructions
35
Fall 2003SYCS-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)
36
Fall 2003SYCS-401 Operating Systems Branch and Jump Instructions
37
Fall 2003SYCS-401 Operating Systems Jump Instructions: Jump J label Jump to instruction at label
38
Fall 2003SYCS-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’
39
Fall 2003SYCS-401 Operating Systems Jump Instructions: Jump & Link
40
Fall 2003SYCS-401 Operating Systems Branch Instructions: Branch on Equal BEQ sourceRegister, targetRegister, label If (sourceRegister == targetRegister) go to instruction at ‘label’
41
Fall 2003SYCS-401 Operating Systems Branch Instructions: Branch if Equal to Zero BEQZ sourceRegister, label If (sourceRegister == 0) go to instruction at ‘label’
42
Fall 2003SYCS-401 Operating Systems Some other Jump/Branch instructions
43
Fall 2003SYCS-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
44
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Load Address LA destinationRegister, address destinationRegister calculated address
45
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Load Immediate LI destinationRegister, immediate destinationRegister immediate value
46
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Move from HI MFHI destinationRegister destinationRegister HI register
47
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Load Byte LB targetRegister, label Load targetRegister with the byte value at address “label”
48
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Store Byte SB targetRegister, label Store low byte value in targetRegister at address “label”
49
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Load Word LW targetRegister, label Load targetRegister with the word value at address “label”
50
Fall 2003SYCS-401 Operating Systems Data Transfer Instructions: Move MOVE destinationRegister, sourceRegister destinationRegister sourceRegister
51
Fall 2003SYCS-401 Operating Systems Some other Data Transfer instructions
52
Fall 2003SYCS-401 Operating Systems Assembler directives: Examples
53
Fall 2003SYCS-401 Operating Systems Template.s
54
Fall 2003SYCS-401 Operating Systems Example.s
55
Fall 2003SYCS-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!”
56
Fall 2003SYCS-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 x:.word 0
57
Fall 2003SYCS-401 Operating Systems If Construct
58
Fall 2003SYCS-401 Operating Systems If Construct
59
Fall 2003SYCS-401 Operating Systems If Construct
60
Fall 2003SYCS-401 Operating Systems Post-Test Loop
61
Fall 2003SYCS-401 Operating Systems Post-Test Loop
62
Fall 2003SYCS-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 li $v0, 10 # Setup an exit call syscall # Do the exit thing
63
Fall 2003SYCS-401 Operating Systems Assembly vs. High-Level Languages (HLLs)
64
Fall 2003SYCS-401 Operating Systems Producing an Executable
65
Fall 2003SYCS-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
66
Fall 2003SYCS-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.
67
Fall 2003SYCS-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
68
Fall 2003SYCS-401 Operating Systems Procedure Calls
69
Fall 2003SYCS-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
70
Fall 2003SYCS-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
71
Fall 2003SYCS-401 Operating Systems The Stack
72
Fall 2003SYCS-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
73
Fall 2003SYCS-401 Operating Systems Procedure Call Conceptually
74
Fall 2003SYCS-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
75
Fall 2003SYCS-401 Operating Systems Called template (Start) Make room on the stack subi $sp, $sp, Why subtraction? Store any registers of interest $ra if your routine makes a function call Why? Any $s0-$s7 registers that will be used Why?
76
Fall 2003SYCS-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, Return jr $ra
77
Fall 2003SYCS-401 Operating Systems Caller template (Returning from the function) Handle results, if any registers $v0, $v1 Restore saved values, if any
78
Fall 2003SYCS-401 Operating Systems Example.s
79
Fall 2003SYCS-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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.