MIPS coding - Florida State University

Download Report

Transcript MIPS coding - Florida State University

MIPS coding
Complete MIPS code
.data
save:
.word 10, 10, 10, 10, 10, 11, 12,
.text
.globl main
main:
li $s3, 0
li $s5, 10
la $s6, save
Loop:
sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit:
done:
li $v0, 10 # these two lines are to tell the simulator to stop
syscall
Complete MIPS code


It has a data segment and a code (text) segment.
The beginning of the data segment in the assembly source code is indicated
as
.data
and followed by several declarations such as
 A:
.word 0,1,2,3,4,5,6,7,8,9
meaning an array of words whose starting address is associated with
label ``A.’’
Complete MIPS code

The text segment in the source code usually starts with
.text
.globl main
main:

where ``main’’ is the label associated with the address of the first
instruction of the code.
And the code usually ends with
li $v0,10 # telling the simulator to stop
syscall

Comment with `#’
Exercise 1
• Suppose we have three arrays, A, B, C, all of size 10. Now we want to
set C[i] = min(A[i], B[i]) for all 0<= i <= 9.
5
week04-3.ppt
7/18/2015
Exercise 1
• Suppose we have three arrays, A, B, C, all of size 10. Now we want to
set C[i] = min(A[i], B[i]) for all 0<= i <= 9.
• First, we need a loop to walk through the elements (done before)
• Second, we need to be able to read the elements (done before)
• Third, we need to be able to compare two numbers (done before)
• Fourth, we need to write back to the memory (easy)
6
week04-3.ppt
7/18/2015
.data
A: .word 12, 34, 67, 1, 45, 90, 11, 33, 67, 19
B: .word 90, 2, 93, 66, 8, 120, 121,11, 33, 9
C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.text
.globl main
main:
la $s0, A
la $s1, B
la $s2, C
li $s3, 10
li $t0, 0
LOOP:
sll $t4, $t0, 2
add $t5, $t4,$s0
lw $t1, 0($t5)
add $t6, $t4,$s1
lw $t2, 0($t6)
slt $t5, $t1, $t2
beq $t5, $0, L1
ori $t8, $t1, 0
j L2
L1:
ori $t8, $t2, 0
L2:
add $t6, $t4, $s2
sw $t8, 0($t6)
addi $t0, $t0, 1
bne $t0, $s3, LOOP
done:
li $v0,10
syscall
# using $t0 as i
#
#
#
#
#
#
#
#
#
$t4 = i * 4
$t5 will have the address of A[i]
$t1 has A[i]
$t6 will have the address of B[i]
$t2 has B[i]
set $t5 to be 1 if A[i] < B[i]
if $t5 == 0, goto L1. in this case, A[i] >= B[i]
setting $t8 to be A[i]
always remember to jump in an if else!
# setting $t8 to be B[i]
# now $t6 has the address of C[i]
# now C[i] has the minimum of A[i] and B[i]
# i ++
# go back if not yet 10 times
SPIM



Run codes with SPIM. SPIM is a simulator.
 Use any editor to write the source file, save it as an .asm file.
 Run PCSpim, load the source file.
 F10 to step through the code. Monitor how the registers change.
 F5 to run the code
 Can set breakpoints for debugging
SPIM can be downloaded at
http://pages.cs.wisc.edu/~larus/spim.html
Lots of good references online, like
https://www.cs.tcd.ie/~waldroj/itral/spim_ref.html
Representing Instructions in Computers


Note that computers only have 0’s and 1’s
Before we can load MIPS instructions into memory,
they need to be translated into machine instructions,
which consist of only 0’s and 1’s



In other words, we need to encode or represent
instructions
The symbolic representation of machine instructions is
called assembly language
The binary representation of instructions is called machine
language

9
A sequence of instructions in binary form is called machine code
CDA3100
7/18/2015
Example
10
CDA3100
7/18/2015
MIPS Instruction Encoding

Each MIPS instruction is exactly 32 bits



R-type (register type)
I-type (immediate type)
J-type (jump type)
op
rs
rt
rd
op
rs
rt
16 bit address or constant
op
11
shamt
funct
26 bit address
CDA3100
7/18/2015
R-Type Encoding
31
26 25
opcode
21 20
rs
16 15
rt
11 10
rd
6
5
shamt
0
funct
rd
rt
add $4, $3, $2
rs
31
26 25
21 20
16 15
11 10
6
5
0
0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
opcode
rs
rt
rd
shamt
funct
0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
Encoding = 0x00622020
12
CDA3100
7/18/2015
R-Type Encoding
31
26 25
opcode
21 20
rs
16 15
rt
11 10
rd
6
5
shamt
0
funct
rd
rt
sub $s0, $t0, $t1
rs
31
21 20
26 25
opcode
rs
16 15
rt
11 10
rd
6
5
shamt
Encoding =
13
CDA3100
7/18/2015
0
funct
R-Type Encoding
31
26 25
opcode
21 20
rs
16 15
rt
11 10
rd
6
5
shamt
0
funct
rd
rt
sub $16, $8, $9
rs
31
21 20
26 25
16 15
11 10
6
5
0
0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0
opcode
rs
rt
rd
shamt
funct
0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0
Encoding = 0x01098022
14
CDA3100
7/18/2015
I-type Encoding
31
26 25
opcode
21 20
rs
16 15
0
rt
Immediate Value
rt
Immediate
lw $5, 3000($2)
rs
31
26 25
21 20
16 15
0
1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0
opcode
rs
rt
Immediate Value
1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0
Encoding = 0x8C450BB8
15
CDA3100
7/18/2015
I-type Encoding
31
26 25
opcode
21 20
rs
16 15
0
rt
Immediate Value
rt
Immediate
sw $5, 3000($2)
rs
31
26 25
opcode
16 15
21 20
rs
rt
0
Immediate Value
Encoding =
16
CDA3100
7/18/2015
I-type Encoding
31
26 25
opcode
21 20
rs
16 15
0
rt
Immediate Value
rt
Immediate
sw $5, 3000($2)
rs
31
26 25
21 20
16 15
0
1 0 1 0 1 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0
opcode
rs
rt
Immediate Value
1 0 1 0 1 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 0 0 0
Encoding = 0xAC450BB8
17
CDA3100
7/18/2015
I-type Encoding
31
26 25
opcode
21 20
rs
16 15
0
rt
Immediate Value
rt
Immediate
addi $s0, $s0, 95
rs
31
26 25
opcode
16 15
21 20
rs
rt
0
Immediate Value
Encoding =
18
CDA3100
7/18/2015
I-type Encoding
31
26 25
opcode
21 20
rs
16 15
0
rt
Immediate Value
rt
Immediate
addi $s0, $s0, 95
rs
31
26 25
21 20
16 15
0
0 0 1 00 0 1 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1
opcode
rs
rt
Immediate Value
0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1
Encoding = 0x2210005F
19
CDA3100
7/18/2015
J-type Encoding
31
26 25
0
opcode
Jump Address
Jump Address
j 0x0040007c
0x0040007c: the address of the instruction to jump to.
When encoding it, take the bit 2 to bit 27.
31
26 25
0
0 0 0 0 1 0 0 0j 0x0040007c
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
opcode
Jump Address
0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
Encoding = 0x0810001F