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

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

Mar 10, 2019

Download

Documents

truongdan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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/