Instruksi Memori dari MIPS

advertisement
Bab 2.
Instructions: Bahasa dari Komputer
• Introduction ke MIPS machine
• Set dari MIPS instruction
MMD 2405
Andi WRE
1
Register vs. Memori
• Komponen dari sebuah komputer
– Prosesor, memori, input, dan output
• Komponen dari sebuah prosesor
– Control dan Datapath (ALU dan register)
• Compiler mengasosiasikan variable - variabel dengan register
-registernya
– Bagaimana dengan program yang memiliki banyak variabel?
Control
Input
Memory
Datapath
Output
Processor
MMD 2405
I/O
Andi WRE
2
Organisasi Memori MIPS
0
1
2
3
4
5
8 bits of data
8 bits of data
8 bits of data
8 bits of data
8 bits of data
8 bits of data
8 bits of data
MMD 2405
• Dapat dipandang sebagai sebuah array single
dimensi yang besar, dengan sebuah alamat / address
• Sebuah address memori adalah index dari array
• Terdapat 232 bytes dengan alamat byte dari 0 sampai
232-1
– Apakah least 2 significant bit dari sebuah word address?
• “Byte addressing” berarti bahwa indeks menunjuk
pada sebuah byte di memori.
• Bytes sudah baik, namun banyak item data
menggunakan “word” yang lebih besar
• Untuk MIPS, sebuah word adalah 32 bit atau 4 byte
• Jadi, MIPS mempunyai 230 word dengan alamat byte
di 0, 4, 8, ... , 232-4
Andi WRE
3
Organisasi Register MIPS
Name Register number
$zero
0
$v0-$v1
2-3
$a0-$a3
4-7
$t0-$t7
8-15
$s0-$s7
16-23
$t8-$t9
24-25
$gp
28
$sp
29
$fp
30
$ra
31
Usage
the constant value 0
values for results and expression evaluation
arguments
temporaries
saved
more temporaries
global pointer
stack pointer
frame pointer
return address
Register 1 ($at) disimpan untuk assembler, 26-27 untuk operating system
MMD 2405
Andi WRE
4
MIPS ISA
• The MIPS instruction set
architecture
– serupa dengan arsitektur lain
yang dikembangkan sejak
1980-an
– Hampir 100 juta prosesor
MIPS dibuat sejak 2002
– Digunakan oleh NEC,
Nintendo, Cisco, Silicon
Graphics, Sony, ...
1400
1300
1200
1100
1000
900
800
Other
SPARC
Hitachi SH
PowerPC
Motorola 68K
MIPS
IA-32
ARM
700
600
500
400
300
200
100
0
1998
MMD 2405
Andi WRE
1999
2000
2001
2002
5
Instruksi Aritmetika dari MIPS
• Semua instruksi memiliki 3 operands
• Urutan instruksi adalah tetap (yang pertama adalah tujuan)
• Operand harus register - register (tidak bisa memori)
– Salah: add 48($s3), $s2, 32($s3)
•
Hanya terdapat 32 register, setiap register terdiri dari 32 bit
Contoh 1:
C code:
MIPS instruction:
Contoh 2:
C code:
MIPS instructions:
MMD 2405
a = b + c
add a, b, c
a = b + c + d
add a, b, c
add a, a, d
Andi WRE
6
Instruksi Memori dari MIPS
• Instruksi: load (lw) dan store (sw)
• Contoh: diasumsikan bahwa A adalah sebuah array dari 100 word dan
compile mengasosiasikannya variabel h dengan register $s2. Base
address dari A adalah $s3.
C code:
A[12] = h + A[8];
MIPS code: lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)
• Kita dapat mengacu register dengan namanya (misal $s2, $t2) selain
dengan angkanya
• Perintah store: tujuan di akhir
MMD 2405
Andi WRE
7
Beberapa Instruksi MIPS
Instruksi
Arti
add $s1, $s2, $s3
sub $s1, $s2, $s3
lw $s1, 100($s2)
$s1 = $s2 + $s3
$s1 = $s2 – $s3
$s1 = Memory[$s2+100]
sw $s1, 100($s2)
Memory[$s2+100] = $s1
MMD 2405
Andi WRE
8
Sebuah Contoh
• Apakah kita dapat mengetahui kode dan angka awal dari
register $4 dan $5?
swap(int v[], int k);
{ int temp;
temp = v[k]
v[k] = v[k+1];
v[k+1] = temp;
}
MMD 2405
swap:
muli $2, $5, 4
add $2, $4, $2
lw $15, 0($2)
lw $16, 4($2)
sw $16, 0($2)
sw $15, 4($2)
jr $31
Andi WRE
9
Format Instruksi MIPS
• Instruksi, seperti register dan data word, juga dalam 32 bit
– Contoh: add $t0, $s1, $s2
– Register memiliki angka, $t0=8, $s1=17, $s2=18
• Format Instruksi:
000000 10001 10010
op
op=0
01000 00000
rs
rt
rd
shamtm
$s1=17 $s2=18 $t0=8
=0
100000
funct
=32
• Dapat menebak arti dari singkatan diatas?
– Op: opcode, rs: 1st register source, rt: 2nd register source, rd: register
destination, shamt: shift amount, funct: function code
MMD 2405
Andi WRE
10
Tiga Format Instruksi MIPS
• R-type:
op
6bits
rs
rt
5bits
5bits
rd
shamtm
funct
5bits
5bits
6bits
• I-type:
op
6bits
rs
5bits
rt
16 bit number
5bits
16 bits
• J-type:
op
6bits
MMD 2405
26 bit address
26 bits
Andi WRE
11
Instruksi Transfer Data MIPS
(memori)
• Perhatikan instruksi load-word dan store-word,
• Contoh: lw $t0, 32($s2)
35
18
8
32
op
rs
rt
16 bit number
• Contoh: sw $t0, 48($s2)
43
18
8
48
op
rs
rt
16 bit number
MMD 2405
Andi WRE
12
Instruksi Kontrol MIPS
• Instruksi pengambil keputusan
– mengubah aliran kontrol
– seperti, mengubah instruksi selanjutnya yang akan dieksekusi
• Instruksi percabangan kondisional MIPS:
bne $t0, $t1, Label
beq $t0, $t1, Label
• Contoh:
if
bne
add
Label:
MMD 2405
(i==j) h = i + j;
$s0, $s1, Label
$s3, $s0, $s1
....
Andi WRE
13
Instruksi Kontrol MIPS (II)
• Instruksi MIPS percabangan tanpa kondisional
j label
• Contoh:
$s5
if (i!=j)
h=i+j;
else
h=i-j;
MMD 2405
beq $s4, $s5, Lab1
add $s3, $s4, $s5
j Lab2
Lab1:
sub $s3, $s4,
Lab2:
Andi WRE
...
14
Instruksi MIPS yang Telah
Dijelaskan
• Instruksi
add $s1,$s2,$s3
sub $s1,$s2,$s3
lw $s1,100($s2)
sw $s1,100($s2)
bne $s4,$s5,L
beq $s4,$s5,L
j Label
MMD 2405
Arti
$s1 = $s2 + $s3
$s1 = $s2 – $s3
$s1 = Memory[$s2+100]
Memory[$s2+100] = $s1
Next instr. is at Label if $s4 ≠ $s5
Next instr. is at Label if $s4 = $s5
Next instr. is at Label
Andi WRE
15
Konstanta
Konstanta kecil sangat sering dipakai (50% dari operands)
contoh, A = A + 5;
B = B + 1;
C = C - 18;
• Solusi? Bagaimana kalau?
• Menempatkan “konstanta tipikal” dalam memori dan me-load-nya
• Menciptakan register yang ditanam di perangkat keras (seperti $zero) untuk
konstanta seperti satu (one).
• Instruksi MIPS:
addi
slti
andi
ori
MMD 2405
$29,
$8,
$29,
$29,
$29,
$18,
$29,
$29,
4
10
6
4
Andi WRE
16
Ringkasan dari Mode Addressing
Contoh:
1. Immediate addressing
op
rs
rt
Immediate
2. Register addressing
op
rs
rt
rd
...
funct
Registers
Register
1.
Addi $29, $29, 4
1.
Add $s1, $s2, $s3
1.
Lw $s1, 32($s2)
1.
Beq $s1, $s2, 25
1.
J Label
3. Base addressing
op
rs
rt
Memory
Address
+
Register
Byte
Halfword
4. PC-relative addressing
op
rs
rt
Memory
Address
PC
+
Word
Word
5. Pseudodirect addressing
op
Address
PC
MMD 2405
Memory
Word
Andi WRE
17
Ringkasan dari Register dan Memori
MIPS operands
Name
Example
Comments
$s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform
32 registers $a0-$a3, $v0-$v1, $gp,
arithmetic. MIPS register $zero always equals 0. Register $at is
$fp, $sp, $ra, $at
reserved for the assembler to handle large constants.
Memory[0],
230 memory Memory[4], ...,
words
Memory[4294967292]
MMD 2405
Accessed only by data transfer instructions. MIPS uses byte addresses, so
sequential words differ by 4. Memory holds data structures, such as arrays,
and spilled registers, such as those saved on procedure calls.
Andi WRE
18
Ringkasan dari Instruksi Umum
add
MIPS assembly language
Example
Meaning
add $s1, $s2, $s3
$s1 = $s2 + $s3
Three operands; data in registers
subtract
sub $s1, $s2, $s3
$s1 = $s2 - $s3
Three operands; data in registers
$s1 = $s2 + 100
$s1 = Memory[$s2 + 100]
Memory[$s2 + 100] = $s1
$s1 = Memory[$s2 + 100]
Memory[$s2 + 100] = $s1
Used to add constants
Category
Arithmetic
Instruction
addi $s1, $s2, 100
lw $s1, 100($s2)
load word
sw $s1, 100($s2)
store word
lb $s1, 100($s2)
Data transfer load byte
sb $s1, 100($s2)
store byte
load upper immediate lui $s1, 100
add immediate
Conditional
branch
Unconditional jump
MMD 2405
$s1 = 100 * 2
16
Comments
Word from memory to register
Word from register to memory
Byte from memory to register
Byte from register to memory
Loads constant in upper 16 bits
branch on equal
beq
$s1, $s2, 25
if ($s1 == $s2) go to
PC + 4 + 100
Equal test; PC-relative branch
branch on not equal
bne
$s1, $s2, 25
if ($s1 != $s2) go to
PC + 4 + 100
Not equal test; PC-relative
set on less than
slt
$s1, $s2, $s3
if ($s2 < $s3) $s1 = 1;
else $s1 = 0
Compare less than; for beq, bne
set less than
immediate
slti
if ($s2 < 100) $s1 = 1;
else $s1 = 0
Compare less than constant
jump
j
jr
jal
jump register
jump and link
$s1, $s2, 100
2500
$ra
2500
go to 10000
Jump to target address
go to $ra
For switch, procedure return
$ra = PC + 4; go to 10000 For procedure call
Andi WRE
19
MMD 2405
Andi WRE
20
Download