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