Anda di halaman 1dari 11

LAPORAN PRAKTIKUM MIKROPROSESOR

STACK DAN SUBROUTINE

Disusun Oleh :
Nama : Annisa Suci Andarini
NIM : 022000006

Dosen Praktikum : Sutanto, Dr.Eng., M.Eng

Elektronika Instrumentasi
Jurusan Teknofika Nuklir
Politeknik Teknologi Nuklir Indonesia
2022
I. TUJUAN
1. Mengerti arti dan penggunaan stack.
2. Mengerti tehnik meancang program dan penggunaan subroutin.

II. 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.
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.
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 :

Hal yang perlu diperhatikan : Jumlah intruksi PUSH sama dengan jumlah intruksi POP
dalam operasi stack.
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 :
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 :

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.

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 :

III. ALAT DAN BAHAN


1. Software Z80
2. Sistem mikroprosesor Kit uPF-1

IV. LANGKAH KERJA


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.
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.

V. ANALISIS DATA

Main Program

Program Bahasa Mesin Arti program


LD B,4 06 04 Isi reg B dengan data 4 (jadi ada 4
pengulangan di subrutin)
LD HL,1A00H 21 00 1A HL menunjukkan alamat awal yang
menyimpan data pertama
LD DE,1A40H 11 40 1A DE menunjuk alamat awal yang
menyimpan data kedu
LD IX,1A08H DD 21 08 1A IX menunjuk alamat awal yang
menyimpan hasil penjumlahan
CALL MADD CD 00 19 Subrutin MADD dipanggil
dialamat 1900H
RST 38H FF Selesai
Program Subroutine

Program Bahasa Mesin Arti program


MADD XOR A 1900 AF Reset data di register A atau
membandingkan data A dengan data
A sendiri
MADD1 LD A,(DE) 1901 1A Memindah data yang ditunjuk DE ke
register A
ADD A,(HL) 1902 86 Menjumlah data dialamat yang
ditunjuk HL dengan register A
DAA 1903 27 Data hexadecimal diubah ke decimal
LD (IX),A 1904 DD 77 00 Hasil penjumlahan di register A
disimpan di alamat yang ditunjuk IX
INC DE 1907 13 Isi reg DE dinaikkan sejumlah
INC HL 1908 23 Isi reg HL dengan dinaikkan
sejumlah
INC IX 1909 DD 23 Isi reg IX dengan dinaikkan sejumlah
1
DJNZ MADD1 190B 10 F4 Mengulangi program MADD1
sampai data di program apabila reg B
belum bernilai
RET 190D C9 Selesai

Hasil Percobaan

1A00 H 1A40 H 1A08 H


01 01 02
03 04 07
02 03 05
04 04 08

VI. PEMBAHASAN
Pada percobaan stack dan subrutin perlu adanya program utama yang bertujuan untuk
memberikan input data dan untuk mengakses program subroutine. Stack dengan perintah
CALL dalam main program berfungsi sebagai pemanggil program subroutine (MADD)
tersebut. Sedangkan Program subroutine sendiri memiliki tujuan untuk menjumlahkan data
pada alamat yang ditunjuk oleh register DE dan HL kemudian 1900H RST 38H FF Kembali
kemonitor menampilkan hasilnya pada alamat yang ditunjuk IX. Input berada pada alamat
yang ditunjuk oleh register DE dan HL, sedangkan output dapat dilihat pada alamat yang
ditunjuk oleh IX. Program utama dan subroutine ini dibuat dalam satu kesatuan dalam
memnjalankan program agar mendapatkan bahasa mesin.
Pada program yang dibuat pada percobaan, alamat awal untuk main program dimulai dari
1800H sedangkan untuk program subroutine dimulai dengan alamat 1900H. Lalu pada
program yang menunjukkan alamat awal untuk menyimpan data pertama berdasarkan hasil
data dengan mengisikan data pada alamat 1A00H dan 1A40H dengan data yang akan dioperasi
jumlahkan (ADD) dari perintah program subroutine kemudian hasil dari penjumlahan tersebut
akan ditunjukkan pada alamat 1A08H. Sehingga pada hasil percobaan menggunakan
mikroprosesor Kit dengan mengisikan data yang akan dijumlahkan pada alamat 1A00H dan
1A40H maka hasilnya akan selalu tertampil pada alamat 1A08H.

VII. KESIMPULAN
➢ Stack dengan perintah CALL dalam main program berfungsi sebagai pemanggil program
subroutine (MADD) tersebut.
➢ Program subroutine sendiri memiliki tujuan untuk menjumlahkan data pada alamat yang
ditunjuk oleh register DE dan HL
➢ Program utama dan subroutine dibuat dalam satu kesatuan dalam memnjalankan program
agar mendapatkan bahasa mesin
➢ Pada hasil percobaan menggunakan mikroprosesor Kit dengan mengisikan data yang akan
dijumlahkan pada alamat 1A00H dan 1A40H maka hasilnya akan tertampil pada alamat
1A08H. hal ini telah sesuai dengan perintah dalam programnya.

VIII. DAFTAR PUSTAKA


Sutanto. 2022. Modul Praktikum Mikroprosesor. Poltek nuklir-BRIN. Yogyakarta
LAMPIRAN
Bahasa Rakitan

Bahasa mesin

Anda mungkin juga menyukai