Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap...

46
April 2016 Kumpulan Instruksi dan Assembly MIPS (Pertemuan ke-25) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Transcript of Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap...

Page 1: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

April 2016

Kumpulan Instruksi dan Assembly MIPS

(Pertemuan ke-25)

Prodi S1 Teknik Informatika Fakultas Informatika

Universitas Telkom

Diedit ulang oleh:

Endro Ariyanto

Page 2: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #1

Kumpulan Instruksi MIPS

Page 3: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #2

Jenis Instruksi MIPS

• Instruksi pada MIPS dibagi dalam tiga bentuk format yakni: format R, format I, format J – R format terdiri dari tiga register dan

function field

– I format terdiri atas dua register dan 16 bit long immediate value

– J format terdiri atas enam bit opcode yang diikuti oleh 26 bits immediate value

Page 4: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #3

Daftar Opcode

0: tipe R (add, sub, and, or, slt)

2: jump (j)

4: branch (beq)

5: branch (bne)

8: penjumlahan dengan immediate (addi)

17: load upper dengan immediate (lui)

35: load (lw)

43: store (sw)

Page 5: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #4

Instruksi dalam MIPS

Add – penambahan add $s1,$s2,$s3 #jumlahkan isi reg s2 dengan isi reg s3

dan simpan hasilnya ke reg s1

Addi – add immediate addi $sp,$sp, 4 #Jumlahkan isi reg sp dengan 4 dan

hasilnya simpan di dalam reg sp

ADDIU -- Add immediate unsigned

ADDU -- Add unsigned

AND -- Bitwise and

ANDI -- Bitwise and immediate

BEQ -- Branch on equal

BGEZ -- Branch on greater than or equal to zero

Page 6: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #5

Instruksi dalam MIPS

BGEZAL -- Branch on greater than or equal to zero and link

BGTZ -- Branch on greater than zero

BLEZ -- Branch on less than or equal to zero

BLTZ -- Branch on less than zero

BLTZAL -- Branch on less than zero and link

BNE -- Branch on not equal bne $t0,$zero, Less #Lompat ke alamat Less jika isi

reg t0 tidak sama dengan nol

DIV -- Divide

DIVU -- Divide unsigned

Page 7: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #6

Instruksi dalam MIPS

J -- Jump JAL -- Jump and link JR -- Jump register LB -- Load byte LI – Load immediate

li $v0, 5 #isi reg v0 dengan sign number (5)

LUI -- Load upper immediate lui $t0, 255 #isi reg t0 bagian upper (bit 16-31) dengan 255

Isi memori sebelum instruksi dieksekusi:

Isi memori sesudah instruksi dieksekusi:

LW -- Load word lw $s1,100($s2) #isi reg s1 dengan data dari memori pada alamat hasil jumlahan dari isi reg s2 dengan 100 (offset)

MFHI -- Move from HI MFLO -- Move from LO

Page 8: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #7

Instruksi dalam MIPS

MULT -- Multiply MULTU -- Multiply unsigned NOOP -- no operation OR -- Bitwise or ORI -- Bitwise or immediate SB -- Store byte SLL -- Shift left logical SLLV -- Shift left logical variable SLT -- Set on less than (signed)

slt $t0,$s0,$s1 #reg t0 diisi dengan 1 jika isi reg s0 lebih kecil daripada reg s1 biasanya diikuti dengan perintah: bne $t0,$zero,Less

SLTI -- Set on less than immediate (signed) slti $t0,$s0, 10 #reg t0 diisi dengan 1 jika isi reg s0 lebih kecil dari 10 biasanya diikuti dengan perintah: bne $t0,$zero,Less

SLTIU -- Set on less than immediate unsigned SLTU -- Set on less than unsigned

Page 9: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #8

Instruksi dalam MIPS

SRA -- Shift right arithmetic

SRL -- Shift right logical

SRLV -- Shift right logical variable

SUB – Subtract sub $s1,$s2,$s3 #kurangkan isi reg s2 dengan isi reg s3

dan simpan hasilnya ke reg s1

SUBU -- Subtract unsigned

SW -- Store word sw $s1,100($s2) #simpan isi reg s1 ke memori pada

alamat hasil jumlahan dari isi reg s2

dengan 100 (offset)

SYSCALL -- System call

XOR -- Bitwise exclusive or

XORI -- Bitwise exclusive or immediate

Page 10: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #9

Studi Kasus – Instruksi Add

• Instruksi penjumlahan isi dua register

• Hasil operasi disimpan dalam register tujuan

Page 11: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #10

Studi Kasus – Instruksi BEQ

• Instruksi percabangan bersyarat

• Terjadi percabangan jika syarat dipenuhi

• Percabangan terjadi dengan mengisikan nilai instruksi target pada PC

Page 12: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #11

Studi Kasus – Instruksi OR

• Melakukan operasi OR pada dua buah input bit per bit

• Hasil operasi disimpan dalam suatu register

• Contoh operasi OR

Page 13: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #12

Bahasa Assembly MIPS

Page 14: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #13

Struktur Program

• Deklarasi data – Ditempatkan pada bagian program setelah directive .data

– Mendeklarasikan nama variabel yang digunakan dalam program, alokasi memori RAM

• Kode – Ditempatkan pada bagian program setelah directive .code

– Mengandung instruksi/kode program

– Pengeksekusian dimulai dari label “main:”

– Program diakhiri dengan “exit system call”

• Komentar – Diawali oleh tanda #

Page 15: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #14

Deklarasi Data

• Format – Nama: tipe_storage nilai

– Membuat variabel dengan nama “nama” yang bernilai “nilai” dan bertipe “tipe_storage”

• Label – Label senantiasa diakhiri oleh tanda “:”

– Contoh: Var1: .word 3 #membuat variabel tunggal dengan

#nilai awal 3

Array1: .byte ‘a’, ‘b’ #membuat array karakter 2 #elemen dengan nilai awal ‘a’ dan

‘b’

Page 16: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #15

Aturan Umum Register MIPS

• Setiap register diberi nama agar mudah diingat

• Terdapat register yang memiliki fungsi khusus dan tidak bisa digunakan untuk menyimpan nilai

Page 17: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #16

Instruksi Load/Store

• Instruksi yang mengakses RAM

• Load – Lw tujuan_register, sumber_RAM

– Lb tujuan_register, sumber_RAM

• Store word – Sw sumber_register, tujuan_RAM

– Sb sumber_register, tujuan_RAM

• Load immediate – Li tujuan_register, nilai

Page 18: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #17

Bahasa Assembly MIPS

• Arithmetic – Add: add $s1, $s2, $s3 # $s1= isi $s2 + isi $s3

– Substract: sub $s1, $s2, $s3 # $s1= isi $s2 – isi $s3

• Data Transfer – Load word: lw $s1, 100($s2) # $s1=Memory[$s2+100]

– Store word: sw $s1, 100($s2) # Memory[$s2+100]=$s1

• Conditional branch – Branch on equal: beq $s1,$s2, L # if ($s1=$s2) go to L

– Branch on not equal: bne $s1,$s2, L # if ($s1!=$s2) go to L

– Set on less than: slt $s1, $s2, $s3 #if ($s2<$s3) $s1=1, else $s1=0

• Unconditional jump – Jump: j 2500 # go to 10000

– Jump register: jr $ra # go to $ra

– Jump and link: jal 2500 #$ra=PC+4; go to 10000 ; for procedure call

Page 19: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #18

Instruksi Load/Store

• Contoh:

.data

var1: .word 23

.text

__start:

lw $t0, var1

Li $t1, 5

sw $t1, var1

done

Page 20: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #19

Pengalamatan Tidak Langsung

• Hanya digunakan pada instruksi load dan store

• Load alamat: – la $t0, var1 #menyalin alamat RAM var1 ke

#dalam register $t0

• Pengalamatan tidak langsung: – lw $t2, ($t0) #mengambil data pada RAM dengan

alamat yang ditunjukkan $t0 ke dalam $t2

– sw $t2, ($t0) #menyimpan data dari reg $t2 ke dalam

RAM dengan alamat yang ditunjukkan $t0

Page 21: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #20

Pengalamatan Berbasis Atau Berindex

• lw $t2, 4($t0) – Mengambil word pada RAM alamat (isi $t0+4) ke dalam

register $t2

– "4" adalah jarak dari register $t0

• sw $t2, -12($t0) – Menyimpan word dari register $t2 ke dalam RAM pada

alamat (isi $t0 - 12)

– Offset negatif dapat digunakan

• Pengalamatan berbasis khusus digunakan pada: – Arrays: mengakses elemen sebagai offset dari alamat basis

– Stacks: mudah dalam mengakses elemen dari stack pointer atau frame pointer

Page 22: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #21

Contoh Pengalamatan Tidak Langsung dan Berindex

.data

array1: .space 12

.text

__start:

la $t0, array1

li $t1, 5

sw $t1, ($t0)

li $t1, 13

sw $t1, 4($t0)

li $t1, -7

done

Page 23: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #22

Instruksi Aritmetika

• Sebagian besar menggunakan 3 buah operand

• Semua operand register

• Ukuran operand adalah 1 word (4 bytes)

• Contoh: – add $t0,$t1,$t2 # $t0 = $t1 + $t2

– sub $t2,$t3,$t4 # $t2 = $t3 – $t4

– addi $t2,$t3, 5 # $t2 = $t3 + 5

– addu $t1,$t6,$t7 # $t1 = $t6 + $t7

– subu $t1,$t6,$t7 # $t1 = $t6 - $t7

Page 24: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #23

Struktur Kendali

• Branch (Pencabangan) – b target #pencabangan tanpa kondisi

– beq $t0,$t1,target

– blt $t0,$t1,target

– ble $t0,$t1,target

– bgt $t0,$t1,target

– bge $t0,$t1,target

– bne $t0,$t1,target

• Jump (Lompatan) – J target # lompat ke label “target”

– Jr $t3 # lompat ke alamat isi $t3

Page 25: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #24

Pemanggilan Subrutin

• Instruksi JAL: Jump and link – Jal sub_label #sub_label adalah nama subrutin

– Menyalin isi program counter ke dalam register $ra

– Lompat ke program dengan label “sub_label”

• Instruksi JR: jump register – Jr $ra

– Lompat ke alamat kembali yang terdapat dalam register $ra

Page 26: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #25

Bahasa Mesin MIPS

• Bahasa mesin adalah bahasa yang bisa dimengerti oleh mesin

• Setiap bahasa assembly diterjemahkan ke dalam bahasa mesin yang dapat dimengerti oleh MIPS

Page 27: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #26

Kompilasi Program C ke Dalam MIPS

• Contoh:

Berikut bagian program C yang mengandung lima variabel a, b, c, d, dan e:

a = b + c;

d = a – e;

Tunjukkan kode MIPS-nya!

Jawab:

add a, b, c

sub d, a, e

Page 28: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #27

Kompilasi Program C ke Dalam MIPS

• Contoh:

Program C kompleks berikut mengandung 5 variabel f, g, h, i, dan j:

f = (g+h) – (i+j);

Apakah yang dihasilkan oleh compiler C?

Jawab:

add t0, g, h

add t1, i, j

sub f, t0, t1

Page 29: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #28

Kompilasi Program C Menggunakan Register

• Contoh:

f = (g+h) – (i+j)

Ubah ke dalam assembly MIPS !

Jawab:

add $t0, $s1, $s2 #register $t0 menyimpan nilai g+h

add $t1, $s3, $s4 #register $t1 menyimpan nilai i+j

sub $s0, $t0, $t1 #f gets $t0-$t1

Page 30: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #29

Kompilasi Assignment Dimana Operand Dalam Memory

• Contoh:

Misal A adalah array 100 word dan compiler memetakan variabel g dan h dengan register $s1 dan $s2. Misal alamat awal, alamat basis, array ada dalam $s3. Terjemahkan program C berikut:

g = h + A[8]

Jawaban:

lw $t0, 32($s3) # Temporary reg $t0 gets A[8]

add $s1, $s2, $t0 # g = h + A[8]

Page 31: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #30

Kompilasi Menggunakan Load dan Store

• Misal variabel h diasosiasikan dengan register $s2 dan alamat dasar array A ada dalam $s3. Bagaimanakah kode assembly MIPS untuk program C berikut?

A[12] = h + A[8]

Jawab:

lw $t0, 32($s3)

add $t0, $s2, $t0

sw $t0, 48($s3)

Page 32: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #31

Kompilasi Menggunakan Variable Array Index

• Berikut contoh array dengan index variabel: g = h + A[i] Misal A adalah array 100 elemen dengan basisnya ada

pada register $s3, compiler mengasosiasikan variabel g, h, dan i dengan register $s1, $s2, dan $s4. Bagaimanakah bahasa MIPS?

Jawaban: add $t1, $s4, $s4 #temp reg $t1=2*i add $t1, $t1, $t1 #temp reg $t1=4*i add $t1, $t1, $s3 #$t1=address of A[i] (4*i+$s3) lw $t0, 0 ($t1) #temp reg $t0=A[i] add $s1, $s2, $t0 #g=h+A[i]

Page 33: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #32

Menterjemahkan Assembly MIPS ke Dalam Instruksi Mesin

• Contoh: Terdapat instruksi MIPS:

add $t0, $s1, $s2

Ubahlah ke dalam kombinasi bilangan desimal kemudian bilangan binernya!

Jawab:

The decimal representation: 0-17-18-8-0-32

In biner:

000000-10001-10010-01000-00000-100000

machine language

00000010001100100100000000100000

Page 34: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #33

Menterjemahkan C ke Dalam Assembly dan Bahasa Mesin MIPS

• Contoh: Terjemahkan bahasa MIPS ke dalam bahasa mesin. Asumsi $t1 menyimpan basis array A dan $s2 sebagai h, program C: A[300] = h + A[300]

• Jawab: Dikompile dalam MIPS lw $t0, 1200($t1) #temp reg $t0 gets A[300] add $t0, $s2, $t0 #temp reg $t0 gets h+A[300] sw $t0, 1200($t1): Bahasa mesinnya:

Page 35: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #34

Instruksi untuk membuat Keputusan

• Compile pernyataan IF ke dalam branch kondisional. Berikut program C:

if (i==j) go to L1;

f = g + h;

L1: f = f – i;

Asumsi 5 buah variabel f-j sama dengan registers $s0 - $s4, bagaimanakah hasil compile dalam kode MIPS?

• Jawab:

beq $s3, $s4, L1 # go to L1 if i equals j

add $s0, $s1, $s2 # f = g + h

L1: sub $s0, $s0, $s3 # f = f – i

Page 36: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #35

Kompilasi pencabangan kondisional

if-then-else

• Menggunakan variabel dan register yang sama seperti contoh sebelumnya, compile statemen berikut:

if (i == j) f = g + h ; else f = g – h;

• Jawab:

bne $s3, $s4, else # go to else if i ≠ j

add $s0, $s1, $s2 # f = g + h (skipped if i ≠ j)

j exit # go to Exit

else: sub $s0, $s1, $s2 # f = g - h

exit:

Page 37: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #36

Kompilasi Liupan dengan variable Array Index

• Berikut ini instruksi loop dalam C: Loop: g = g + A[i]; i = i + j; if (i != h) goto Loop; Asumsi A adalah array 100 element dan

kompiler mengasosiasikan variabel g, h, i, dan j dengan register $s1, $s2, $s3 dan $s4 berturut-turut. Misal basis array A terdapat dalam $s5. Bagaimanakah kode MIPS?

Page 38: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #37

Kompilasi Liupan dengan variable Array Index

• Jawab:

Loop: add $t1, $s3, $s3 # Temp reg $t1 = 2*i

add $t1, $t1, $t1 # Temp reg $t1 = 4*i

add $t1, $t1, $s5 # $t1 = address of A[i]

lw $t0, 0($t1) # Temporary reg $t0 = A[i]

add $s1, $s1, $t0 # g = g + A[i]

add $s3, $s3, $s4 # i = i + j

bne $s3, $s2, Loop # go to Loop if i ≠ h

Page 39: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #38

Kompilasi Liupan while

• Pemeriksaan kondisi yang terdapat setelah instruksi While

• Jika terpenuhi maka isi liupan dijalankan

• Jika tidak terpenuhi keluar dari liupan

Page 40: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #39

Kompilasi Liupan while

• Berikut loop dalam C:

while (save[i] ==k)

i = i + j;

Asumsi i, j, dan k berkorespondensi dengan register $s3, $s4, dan $s5 dan basis array disimpan dalam $s6.

Bagaimanakah bahasa MIPS-nya?

Page 41: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #40

Kompilasi Liupan while

• Jawab: Ambil nilai save[i] ke dalam register temp

Loop: add $t1, $s3, $s3 # Temp reg $t1 = 2 * i

add $t1, $t1, $t1 # Temp reg $t1 = 4 * i

add $t1, $t1, $s6 # $t1 = address of save[i]

lw $t0, 0($t1) # temp reg $t0 = save[i]

bne $t0, $s5, Exit # go to Exit if save[i] ≠ k

add $s3, $s3, $s4 # go to Loop

j Loop

Exit:

Page 42: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #41

Kompilasi pengecekan Less Than

• Apakah kode untuk memeriksa jika variabel a (berkorespondensi dengan register $s0) lebih kecil dari variabel b (register $s1) dan lompat ke label Less jika kondisi dipenuhi?

• Jawab:

slt $t0, $s0, $s1 # $t0 gets 1 if $s0<$s1(a<b)

bne $t0, $zero, Less # go to Less if $t0 ≠ 0

# that is if a<b

Page 43: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #42

Case/Switch Statement

• Kode C berikut memilih diantara 4 alternatif tergantung nilai k 0, 1, 2, atau 3

switch (k) {

case 0: f = i + j; break;

case 1: f = g + h; break;

case 2: f = g – h; break;

case 3: f = i – h; break;

}

Asumsi 6 variabel f – k berkorespondensi dengan 6 register $s0 - $s5 dan register $t2 bernilai 4.

Page 44: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #43

Case/Switch Statement

• Jawab: kita gunakan switch variabel k sebagai index alamat jump address table, dan loncat melalui nilai yang diambil.

slt $t3, $s5, $zero # test if k<0

bne $t3, $zero, Exit # if k < 0, go to exit

slt $t3, $s5, $t2 # test if k<4

beq $t3, $zero, Exit # if k ≥ 4, go to exit

Page 45: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #44

Case/Switch Statement

add $t1, $s5, $s5 # temp reg $t1 = 2 * I

add $t1, $t1, $t1 # temp reg $t1 = 4 * I

add $t1, $t1, $t4 # $t1 = address of Jumptable[k]

lw $t0, 0 ($t1) # temp reg $t0 = JumpTable[k]

jr $t0 # jump based on register $t0

L0: add $s0, $s3, $s4 # k = 0 so f gets i + j

j Exit # end

L1: add $s0, $s1, $s2 # k = 1 so f gets g + h

j Exit # end

L2: sub $s0, $s1, $s2 # k = 2 so f gets g - h

j Exit # end

L3: sub $s0, $s3, $s4 # k = 3 so f gets i - j

Exit: # end

Page 46: Kumpulan Instruksi dan Assembly MIPS · •Format –Nama: tipe_storage nilai ... •Setiap register diberi nama agar mudah diingat •Terdapat register yang memiliki fungsi khusus

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #45

Referensi

• Hennessy, John L. dan Patterson, David A. 2005. “Computer Organization and Design: The Hardware/Software Interface”. 3rd edition. Morgan Kaufmann publisher Inc. San Fransisco. USA

• http://chortle.ccsu.edu/AssemblyTutorial/ Chapter-01/