Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik...

23
April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Transcript of Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik...

Page 1: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

April 2016

Assembly MIPS (bag-2) (Pertemuan ke-26)

Prodi S1 Teknik Informatika Fakultas Informatika

Universitas Telkom

Diedit ulang oleh:

Endro Ariyanto

Page 2: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #1

Prosedur Dalam MIPS

Page 3: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #2

Tahap Pemanggilan Prosedur

• Menempatkan parameter dimana prosedur dapat mengaksesnya

• Kirim kontrol ke prosedur

• Menyediakan sumber daya storage yang diperlukan oleh prosedur

• Lakukan tugas yang diinginkan

• Tempatkan hasilnya pada tempat dimana program pemanggil dapat mengaksesnya

• Kembali ke program awal

Page 4: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #3

Alokasi MIPS untuk prosedur

• $a0 - $a3: 4 argumen untuk mengirim parameter

• $v0 - $v1: 2 register nilai untuk nilai yang dihasilkan

• $ra: 1 register alamat kembali untuk kembali ke program asal

• $sp: stack pointer untuk menunjukkan alamat dimana data dicadangkan

• Jal: jump and link ke call procedure

• Jr $ra: jump return ke alamat kembali

Page 5: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #4

Alokasi MIPS untuk prosedur

• Pada saat program utama akan memanggil prosedur terlebih dahulu nilai parameter disimpan dalam register argumen

• Dalam prosedur yang dipanggil hasil akhirnya disimpan dalam register tempat menyimpan hasil

• Register $ra digunakan sebagai register yang menyimpan tempat alamat kembali ke program utama

Page 6: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #5

Register yang tidak boleh dan boleh digunakan dalam pemanggilan prosedur

• Register yang tidak boleh digunakan (Preserved) – Register Save: $s0 - $s7

– Register Stack pointer: $sp

– Register Return address: $ra

– Stack di atas stack pointer

• Register yang boleh digunakan (Unpreserved) – Register Temporary $t0 - $t7

– Register Argument: $a0 - $a3

– Register nilai prosedur: $v0 - $v1

– Stack di bawah stack pointer

Page 7: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #6

Contoh dalam C

int leaf_example (int g, int h, int i, int j)

{

int f;

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

return f;

}

Page 8: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #7

Program dalam MIPS

leaf example:

subi $sp, $sp, 12

sw $t1, 8($sp)

sw $t0, 4($sp)

sw $s0, 0($sp)

add $t0, $a0, $a1

add $t1, $a2, $a3

sub $s0, $t0, $t1

add $v0, $s0, $zero

lw $s0, 0($sp)

lw $t0, 4($sp)

lw $t1, 8($sp)

addi $sp, $sp, 12

jr $ra

Page 9: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #8

Prosedur Bersarang

int fact (int n)

{

if (n<1) return (1);

else return (n * fact(n-1));

}

Page 10: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #9

Program Dalam MIPS

fact:

subi $sp, $sp, 8

sw $ra, 4($sp)

sw $a0, 0($sp)

slt $t0, $a0, 1

beq $t0, $zero, L1

add $v0, $zero, 1

addi $sp, $sp, 8

jr $ra

L1: sub $a0, $a0, 1

jal fact

lw $a0, 0($sp)

lw $ra, 4($sp)

addi $sp, $sp, 8

mul $v0, $a0, $v0

jr $ra

Page 11: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #10

Layanan System Call

Page 12: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #11

Layanan System Call

• Layanan print_string memerlukan alamat awal string karakter

• Directive .asciiz membuat “null-terminated character string”

• Layanan read_int, read_float, dan read_double membaca seluruh baris input termasuk karakter baris baru

• Layanan read_string sama dengan semantik rutin fgets pada library UNIX – Membaca sampai n-1 karakter ke dalam buffer dan

memberi nilai akhir string dengan karakter null

Page 13: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #12

Layanan System Call

• Layanan sbrk mengembalikan nilai alamat block memory yang mengandung n byte tambahan

• Layanan ini digunakan untuk alokasi memori dinamis

• Layanan exit menghentikan program yang sedang berjalan

• Contoh: mencetak nilai integer li $v0, 1

move $a0, $t2

syscall

Page 14: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #13

Contoh Layanan System Call

• Membaca nilai integer, menyimpan dalam RAM: li $v0, 5

syscall

sw $v0, int_value

• Mencetak string .data

String1: .asciiz "Print this.\n"

.text

main: li $v0, 4

la $a0, string1

syscall

Page 15: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #14

System Call dan I/O pada SPIM

• Digunakan untuk membaca atau menulis nilai atau string dari input/output, dan mengindikasikan akhir program

• Menggunakan “syscall” untuk memanggil rutin sistem operasi

• Menyimpan nilai tertentu dalam registers $v0 dan $a0-$a1

• Jika terdapat hasil akan disimpan dalam register $v0

Page 16: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #15

PC SPIM

• PCSpim merupakan aplikasi untuk mensimulasikan program assembly MIPS

• Program assembly bisa ditulis pada Notepad, kemudian disimpan dengan ekstensi .asm

• Pada PCSpim, buka file .asm tersebut

• Jalankan program dengan mengubah “Starting Address” dari 0x00000000 menjadi 0x00400000 sesuai alamat awal program

Page 17: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #16

Contoh Program Perkalian (1)

.data

string1: .asciiz "Masukkan bilangan pertama:"

string2: .asciiz "Masukkan bilangan kedua:"

string3: .asciiz "Hasil perkalian adalah:"

string4: .asciiz "\n"

string5: .asciiz "Jika hasil perkalian = 99, maka program akan keluar.\n"

string6: .asciiz "Goodbye......."

.text

main:

li $v0,4 # menuliskan string5 ke layar

la $a0, string5

syscall

li $v0,4 # ganti baris

la $a0, string4

syscall

Page 18: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #17

Contoh Program Perkalian (2)

jal proc_input1 # memanggil prosedur proc_input

or $s0, $zero, $v0 # memindahkan hasil bilangan I ke $s0

jal proc_input2 # memanggil prosedur proc_input

or $s1, $zero, $v0 # memindahkan hasil bilangan II (pengali) ke

jal proc_kali # memanggil prosedur proc_kali

or $s2, $zero, $v0 # memindahkan hasil perkalian ke $a2

jal proc_output # memanggil prosedur proc_output

li $v0,4 # ganti baris

la $a0, string4

syscall

li $v0,4 # ganti baris

la $a0, string4

syscall

Page 19: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #18

Contoh Program Perkalian (3)

li $t8,99

bne $t8, $t0, main

li $v0,4 # keluar

la $a0, string6

syscall

li $v0,10

syscall

proc_input1:

li $v0,4 # menuliskan string1 ke layar

la $a0, string1

syscall

ori $v0, $zero, 5 # meminta inputan integer dari user

syscall

j $ra

Page 20: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #19

Contoh Program Perkalian (4)

proc_input2:

li $v0,4 # menuliskan string1 ke layar

la $a0, string2

syscall

ori $v0, $zero, 5 # meminta inputan integer dari user

syscall

j $ra

proc_kali:

or $t0, $zero, $zero # inisiasi $t0 = 0 (utk menampung hasil kali)

or $t1, $s1, $zero # $t1 diisi dengan $s1 (pengali)

ulang: beq $t1, $zero, exit # jika $t1 (pengali) = 0 lompat ke exit

add $t0, $t0, $s0 # tambahkan $t0 dengan isi $s0 (bilangan I)

addi $t1, $t1, -1 # kurangi bilangan pengali dengan 1

j ulang

exit: or $v0, $zero, $t0 # copy hasil perkalian ($t0) ke $v0

j $ra

Page 21: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #20

Contoh Program Perkalian (5)

proc_output:

ori $v0, $zero, 4 # tampilkan string2 ke layar

la $a0, string3

syscall

ori $v0, $zero,1 # menampilkan hasil ke layar

or $a0,$zero,$s2

syscall

j $ra

Page 22: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #21

Contoh Hasil Eksekusi

Page 23: Assembly MIPS (bag-2) · April 2016 Assembly MIPS (bag-2) (Pertemuan ke-26) Prodi S1 Teknik Informatika Fakultas Informatika Universitas Telkom Diedit ulang oleh: Endro Ariyanto

Organisasi dan Arsitektur Komputer – CSG2G3/2016 #22

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/