LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR STACK DAN SUBROUTINE Disusun oleh : Nama : Yudi Irwanto (021500456) Rekan Kerja : Safira Rachmadewi (021500453) Tri Handayani (021500454) Prodi : Elektronika Instrumentasi Tanggal Praktikum : 4 Mei 2017 Asisten : Rokhmat Arifianto Adib Afham SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA NUKLIR NASIONAL YOGYAKARTA 2017
20
Embed
SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada
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
LAPORAN
PRAKTIKUM SISTEM MIKROPROSESSOR
STACK DAN SUBROUTINE
Disusun oleh :
Nama : Yudi Irwanto (021500456)
Rekan Kerja : Safira Rachmadewi (021500453)
Tri Handayani (021500454)
Prodi : Elektronika Instrumentasi
Tanggal Praktikum : 4 Mei 2017
Asisten : Rokhmat Arifianto
Adib Afham
SEKOLAH TINGGI TEKNOLOGI NUKLIR
BADAN TENAGA NUKLIR NASIONAL
YOGYAKARTA
2017
2 Yudi Irwanto_021500456
PERCOBAAN 5
STACK DAN SUBROUTINE
A. Tujuan
1. Mengerti arti dan penggunaan stack.
2. Mengerti tehnik merancang program dan penggunaan subroutin. B. LANDASAN TEORI.
1. STACK Dalam merencanakan program stack dikenal sebagai daerah memori yang hanya
mempunyai satu gerbang (port) untuk input dan output. Data ditulis atau diambil (dibaca) dari
stack melalui port ini. Data pertama yang diletakkan di stack dikatakan berada di bagian bawah
stack. Data yang terakhir dimasukkan berada pada bagian atas stack. Jadi stack dapat dikatakan
memori yang ‘last-in first-out’ (masuk terakhir keluar terlebih dahulu). Stack dapat dibuat
dengan piranti keras (hard ware) yaitu shift register atau RAM pada umumnya. Dalam sistim
mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya
ialah dengan menambah alamat tertinggi pada RAM dengan 1, kemudian dimasukkan kedalam
penunjuk stack (Stack Pointer atau SP) pada CPU. Program dan diagram berikut ini
menggambarkan operasi stack.
(1) LD SP, Stack poiter diset pada 1FAFH, yaitu daerah
1FAFH RAM dengan alamat kurang dari atau sama dengan
1FAEH ditunjuk sebagai stack.
(2) DEC SP Kurangi SP dengan 1. Stack pointer berada pada
1FAEH, yaitu bagian bawah stack.
(3) LD (SP), H Masukkkan isi register H ke memori (RAM) pada
alamat 1FAEH.
(4) DEC SP Kurangi lagi dengan 1. SP bergerak keatas.
(5) LD (SP), L Tempatkan isi L ke bagian atas Stack (yaitu diatas
H)
(6) DEC SP
(7) LD SP Tempatkan isi A pada bagian atas stack (yaitu
diatas L)
(8) DEC SP
(9) LD (SP), F Tempatkan isi F ke bagian atas Stack (yaitu diatas
A).
(10) LD C, (SP) Ambil (pop) satu byte data dari atas stack dan
pindahkan ke register C.
(11) INC SP SP ditambah dengan 1. SP bergerak kebawah.
(12) LD B, (SP) Ambil (pop) data dari atas stack.
(13) INC SP SP ditambah dengan 1 lagi.
(14) LD E, (SP) Ambil data dari atas stack dan pindahkan ke
register E.
(15) INC SP
(16) LD D, (SP) Ambil data dari atas stack dan pindahkan ke
register D. Data ini adalah data yang pertama kali
disimpan pada stack.
(17) INC SP SP berada pada nilai asal (awal)
3 Yudi Irwanto_021500456
RAM RAM
SP yang ditunjuk SP yang ditunjuk
Oleh intruksi ke 9 oleh inst ke 10 C
F
F ke 12
F
B
SP yang ditunjuk
A
A ke 14
A
E
Oleh intruksi ke 3
L
L
L
D
Nilai awal SP 1FAFH
H
H ke 16
H
ke 17
Memasukkan (push) data pada Mengambil (pop) data dari
Stack Stack
Dari ilustrasi operasi stack diatas, kita dapat melihat bahwa data dapat disimpan pada
RAM dengan menggunakan SP sebagai penunjuk. SP dikurangi dengan 1 (decremented) bilamana ada satu byte data yang disimpan dan area stack menjadi lebih besar. SP ditambah dengan 1 (decremented) bilamana ada satu byte data yang diambil dari area stck dan area stack menjadi lebih kecil. Proses mengurangi SP dengan 1 (memasukkan data ke stack) atau menambah SP dengan 1 (mengambil data dari stack) dapat dilakukan secara otomatis dengan satu rangkaian khusus. Stack dapat juga digunakan untuk menyimpan alamat (atau data) 16 bit. Dalam sistem Z80/8085, ada intruksi untuk memasukkan pasangan register 16 bit kedalam stack, serta mengambil data 16 bit dari stack. Dalam tiap-tiap operasinya, SP dikurani atau ditambah dengan 2. Program ini mempunyai fungsi yang sama dengan program diatas.
LD SP, 1FAFH Sama dengan intruksi pertama
PUSH HL Sama dengan intruksi ke-2,3,4,5.
PUSH AF Sama dengan intruksi ke-6,7,8,9.
POP BC Sama dengan intruksi ke-10,11,12,13.
POP DE Sama dengan intruksi ke-14,15,16,17.
Intruksi PUSH dan POP dapat juga digunakan untuk menyimpan data sementara pada
register, dapat pula digunakan untuk memindahkan data ke register. Kita dapat melihat contoh
dibawah ini :
PUSH BC
POP IX Pindahkan data 16 bit yang ada di BC ke IX
PUSH HL
AND A
SBC HL, DE Bandingkan HL dengan DE untuk menghasilkan status
flag. Nilai HL tidak berubah.
Hal yang perlu diperhatikan :Jumlah intruksi PUSH sama dengan jumlah intruksi
POPdalam operasi stack.
4 Yudi Irwanto_021500456
2. SUBROUTINE :
Program-program untuk aritmatik (penambahan,pengurangan,perkalian atau pembagian),
keyboard, kontrol display dan sebagainya seringkali digunakan sebagai bagian dari suatu
program yang besar dalam aplikasi-aplikasi praktis. Jika seorang programer harus menuliskan
kembali program-program kecil tersebut setiap kali dia membutuhkannya, tentulah akan sangat
menjemukan. Untuk menghemat memori dan mengurangi kesalahan, subroutin sering digunakan
dalam program-program besar. Intruksi CALL dan RET (table C-2) digunakan untuk memanggil
/ menunjuk subroutine yang akan dipakai. Subroutin dapat dilaksanakan tanpa syarat, atau
menurut keadaan flag. Intruksi CALL pada program utama digunakan untuk memanggil
subroutine. Fungsinya terdiri dari dua operasi seperti yang digambarkan dibawah ini :
CALL 1A38H ; memangil subroutin yang tersimpan pada
alamat 1A38H
Sama dengan
PUSH PC ; masukkan (push) PC saat itu ke stack
JP 1A38H ; loncat ke alamat 1A38H dan melanjutkan
pelaksaan program. Intruksi RET tidak membutuhkan operand (intruksi 1 byte), sama dengan intruksi „POP PC‟.
RET ; kembali ke program asal dan melanjutkan
pelaksaan program.
Sama dengan
POP PC ; Mengambil data 16 bit dari stack dan
memasukkan ke PC, lalu melaksanakan program sesuai isi PC.
Mengambil suatu subroutin adalah langkah yang penting dalm suatu program. Subroutin
dalam suatu program dapat berbentuk saling bersarang (dalam satu subroutin terdapat subroutin lain). Untuk lebih jelasnya hubungan itu dapat digambarakan sebagai berikut :
5 Yudi Irwanto_021500456
Program utama Subroutin 1
CALL
1
CALL
CALL
2
1
CALL
RET
Subroutin 2
2
RET
Biasanya, subroutin ditulis oleh seorang ahli. Pemakai hanya perlu mengetahui prosedure pemanggilnya. Jika subroutin tersebut ditulis oleh pemakainya sendiri, hal-hal berikut ini perlu dipertimbangkan dalam merancang subroutin :
(1) Nama untuk subroutin sebaiknya dipilih nama yang mudah diingat.
(2) Bagaimana mendapatkan data yang dibutuhkan dalam subroutin sebelum
menjalankan subroutin tersebut.
(3) Bagaimana menyatakan hasil pelaksaan subroutin itu.
(4) Register mana yang akan berubah setelah pelaksanaan subroutin.
(5) Berapa besar memori yang akan ditempati oleh subroutin yang bersangkutan dan
berapa lama waktu yang dibutuhkan oleh CPU untuk melaksanakn subroutin
tersebut. Hal-hal berikut ini harus diperhatikan bila suatu subroutin dipangil oleh program utama :
(1) Data yang dibutuhkan oleh subroutin harus disimpan.
(2) Register-register yang tidak boleh berubah setelah pelaksanaan subroutin tersebut
harus disimpan dalam stck sebelum memanggil subroutin tersebut.
(3) Hasil yang diperoleh dari pelaksanaan subroutin akan diproses dengan metode
yang digambarkan dalam subroutin.
Progrma berikut ini adalah contoh subroutine yang bernama MADD, yang dapat digunakan untuk penambahan multi byte BCD.
6 Yudi Irwanto_021500456
LOC OBJ St Source
mt Statement
1 ROUTIN PENAMBAHAN
MULTY BYTE BCD
2 Input : HL MENUNJUK BYTE
ORDE RENDAH
BILANGAN YANG DI
TAMBAH
3 DE MENUNJUK BYTE
ORDE RENDAH
BILANGAN PENAMBAH
4 B=JUMLAH BYTE, 1
BYTE=2 DIGIT BCD
5 Output : IX MENUNJUK BYTE
BILANGAN YANG
DIHASILKAN YANG
BERORDE RENDAH
6 REG YANG BERUBAH :
AF. B, HL, DE, IX
7 MEMORI YANG
DIGUNAKAN : 15 BYTE
8
1900 AF 9 MADD XOR A NOL-KAN CARRY FLAG
1901 1A 10 MADD1 LD A,(DE)
1902 86 11 ADD A, (HL)
1903 27 12 DAA
1904 DD7700 13 LD (IX), A
1907 13 14 INC DE
1908 23 15 INC HL
1909 DD23 16 INC IX
190B 10F4 17 DJNZ MADD1
190D C9 18 RET
0 Asembly errors
Dua data BCD 4 byte disimpan di memori dengan alamat awal 1A00H dan 1A40H.
Untuk menambahkan data BCD ini bersama-sama dan menyimpan hasilnya pada RAM alamat
1A08H, subroutin MADD dipanggil dengan prosedure berikut ini :
LD B,4 Set jumlah byte = 4
LD HL, 1A00H HL menunjuk alamat bilangan yang ditambah
LD DE, 1A40H DE menunjuk alamat bilangan penambah
LD IX, 1A08H IX menunjuk alamat bilangan yang dihasilkan
CALL MADD
7 Yudi Irwanto_021500456
C. PERCOBAAN-PERCOBAAN
1. Dengan menggunakan instruksi-instruksi untuk operasi stack, tulislah suatu rutin untuk
memindahkan berturut-turut data pada HL, DE, dan BC ke HL‟, BC‟, DE‟. Masukkan
program pada MPF-I dan jalankan. 2. Dalam program berikut ini loop kecil dikelilingi oleh loop besar. Fungsi program ini
menggeser semua data 8 bit pada alamat 1A00H – 1A20H ke kiri 4 bit. Gunakan register B
sebagai penghitung loop untuk loop kecil dan besar. Masukkan program ke uPF-I dan
jalankan. Diskusikan hasilnya mengapa register B dapat dipakai sebagai penghitung kedua
loop.
1800 1 ORG 1800H
1800 06 21 2 LD B, 21H
1802 21 00 1A 3 LD HL, 1A00H
1805 C5 4 LOOP 1 PUSH BC
1806 7E 5 LD A, (HL)
1807 06 04 6 LD B, 4
1809 87 7 LOOP 2 ADD A, A
180A 10 FD 8 DJNZ LOOP 2
180C 77 9 LD (HL), A
180D 23 10 INC HL
180E C1 11 POP BC
180F 10 F4 12 DJNZ LOOP 1
1811 76 13 HALT
3. Dengan memanggil subroutin yang diberikan pada bagian pertama (routin penambahan
multi byte BCD), tulislah sebuah program untuk penambahan dua data 8 byte yang
tersimpan pada memori 1A00H dan 1A40H. Hasilnya harus disimpan pada memori 8 byte
yang dimulai pada 1A00H. 4. Ubahlah program diatas untuk pengurangan BCD atau penambahan / pengurangan multy
byte biner. Cobalah programnya dan catat metoda revisi yang digunakan. 5. Tulislah subroutin untuk mengubah data 16 bit pada HL menjadi komplemen keduanya.
Tulislah suatu program utama untuk mengubah data pada IX dan IY menjadi komplemen
keduanya. Masukkan proram ke uPF-I dan cobalah. 6. Dengan menggunakan routin diatas untuk meng-komplemen-kan pasangan register HL,
tulislah suatu program utama untuk mengurangi data pada IY dan DE dan menyimpan
hasilnya pada IY.
8 Yudi Irwanto_021500456
8
0000 AF 9 MADD XOR A NOL-KAN CARRY FLAG
0001 1A 10 MADD1 LD A,(DE)
0002 86 11 ADD A, (HL)
0003 27 12 DAA
0004 DD7700 13 LD (IX), A
0007 13 14 INC DE
0008 23 15 INC HL
0009 DD23 16 INC IX
000B 10F4 17 DJNZ MADD1
00D C9 18 RET
LD B,4 Set jumlah byte = 4
LD HL, 1A00H HL menunjuk alamat bilangan yang ditambah
LD DE, 1A40H DE menunjuk alamat bilangan penambah
LD IX, 1A08H IX menunjuk alamat bilangan yang dihasilkan