PERCOBAAN 5 STACK DAN SUBROUTINE. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

dokumen-dokumen yang mirip
LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR STACK DAN SUBROUTINE

PERCOBAAN 2 TRANSFER DATA. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

PERCOBAAN 3 INSTRUKSI ARITMATIK DAN LOGIK. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

PERCOBAAN 7 PEMBAGIAN BINER

PERCOBAAN 4 INSTRUKSI PERCABANGAN. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

PERCOBAAN 6 INSTRUKSI PUTAR, GESER, DAN ROUTINE PERKALIAN. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

PERCOBAAN 1 PENGENALAN MIKROPROSESOR MPF-I. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR APLIKASI DASAR INSTRUKSI ARITMATIKA DAN OPERASI LOGIK

INSTRUKSI-INSTRUKSI MIKROPROSESOR Z80. Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia

LAPORAN PRAKTIKUM MIKROPROSESOR PEMINDAHAN DATA

LAB SHEET 5 PEMROGRAMAN DENGAN STACK POINTER (INSTRUKSI PUSH DAN POP)

LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR INSTRUKSI PERCABANGAN DAN LOOP

BAB 4 STACK AREA, SUBROUTINE dan INSTRUKSI BLOK

LAPORAN PRAKTIKUM MIKROPROFESOR Z80-PIO UNTUK GERAK MOTOR STEPPER

INSTRUKSI DASAR Salahuddin, SST.

BAB 3 Pemrograman Zilog Z80 Lanjutan

DESKRIPSI SINGKAT INSTRUKSI-INSTRUKSI PADA AT89S51

Operasi Transfer Data

REGISTER Register-register yang terdapat pada mikroprosesor, antara lain :


BAB 2 Pemrograman Zilog Z80

MATERI SITEM MIKROPROSESOR X TAV, XT ELIN

UNIVERSITAS NEGERI YOGYAKARTA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM (FMIPA)

Microcontroller: Bahasa Pemrograman Assembly 8051

BAB I PENDAHULUAN. A. Deskripsi. B. Prasyarat. C. Petunjuk Penggunaan Modul. 1. Bagi Guru/Fasilitator

OPERATION SYSTEM. Jenis - Jenis Register Berdasarkan Mikroprosesor 8086/8088

Arsitektur Set Instruksi. Abdul Syukur

MODUL PRAKTIKUM SISTEM OPERASI PRAKTIKUM I MODEL PEMROGRAMAN 1

Sistem Komputer. Komputer terdiri dari CPU, Memory dan I/O (Arsitektur Von-Neumann) Ada tiga bus dalam sistem komputer

BAB I PENDAHULUAN. A. Deskripsi. B. Prasyarat. C. Petunjuk Penggunaan Modul. 1. Bagi Guru/Fasilitator

ARSITEKTUR MIKROPROSESOR Z80. Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia

BAB VII KOMPUTER SEDERHANA SAP-3 (SIMPLE AS POSSIBLE-3)

Materi 3. Komponen Mikrokomputer SYSTEM HARDWARE DAN SOFTWARE DADANG MULYANA

BAHASA DAN PENGEMBANGAN PROGRAM MIKROPROSESOR

INSTRUKSI MIKROPROSESOR

Tahun Akademik 2015/2016 Semester I DIG1B3 Konfigurasi Perangkat Keras Komputer

Kuis : Bahasa Rakitan (UAS)

BAHASA PEMROGRAMAN MIKROKOMPUTER

PEMROGRAMAN MIKROPROSESOR KASUS PADA MPF-1

BAHASA PEMOGRAMAN MIKROPROSESOR Z80. Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia

LAPORAN PRAKTIKUM. Praktek Mikroprosesor 1 Job Sheet 2

BAHASA PEMOGRAMAN AT89S/Cxx (assembly)

LAPORAN PRAKTIKUM MIKROPROSESOR PENGENALAN DAN PENGGUNAAN KIT MPF-1. Disusun oleh:

7.Lokasi hasil pemrosesan

LAMPIRAN D DATA SHEET

Tahun Akademik 2015/2016 Semester I DIG1B3 Konfigurasi Perangkat Keras Komputer

SISTEM KOMPUTER.

DCH1B3 Konfigurasi Perangkat Keras Komputer SAP-2

MODUL V STACK dan PENGENALAN PROCEDURE

Arsitektur SAP-2 W BUS ACKNOWLEDGE HEXADECIMAL KEYBOARD ENCODER ACCUMULATOR INPUT PORT 1 ALU FLAGS READY INPUT PORT 2 SERIAL IN PROGRAM COUNTER TMP

PERTEMUAN. SET INSTRUKSI MIKROKONTROLER AT 89C51 (Lanjutan)

LAPORAN PRAKTIKUM SISTEM MIKROPROSESOR PENGATURAN LAMPU LALU LINTAS DENGAN SENSOR HARI DAN JAM

SISTEM KERJA MIKROPROSESOR

MAKALAH MODE DAN FORMAT PENGALAMATAN SET INSTRUKSI. Nama : Annisa Christyanti Kelas : XI TJA 3 NIS :

DASAR PEMROGRAMAN MIKROPROSESOR

Instruksi Mikroprosesor

2. Unit Praktikum Perhitungan Aritmatika

Hanif Fakhrurroja, MT

AD Channel AD Conversion

Simple As Possible (SAP) - 1. Abdul Syukur

Percobaan 7 REGISTER (PENCATAT) Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

SOAL UAS SISTEM KOMPUTER Kelas XI RPL & TKJ

Tabel Perbandingan ROM dan RAM pada beberapa seri ATMEL

Pengendalian 8 buah Motor oleh DST-51

Pada pembahasan kali ini, digunakan instruksi MOV untuk menjelaskan mode pengalamatan data. Format penulisannya adalah :

Set Instruksi & Mode Pengalamatan. Team Dosen Telkom University 2016

Organisasi & Arsitektur Komputer

ARSITEKTUR MIKROPROSESOR

Simple As Possible (SAP) - 2. Abdul Syukur

ORGANISASI KOMPUTER MOTOROLA MATA KULIAH:

LAB SHEET 2 MODUS PENGALAMATAN DAN ISI MEMORI DATA

INTRUKSI-INTRUKSI BAHASA PEMROGRAMAN ASSEMBLY

LAB SHEET 3 OPERASI ARITMATIKA

ARSITEKTUR KOMPUTER SET INSTRUKSI

Simple As Possible (SAP) - 2. Abdul Syukur

Stack Addressing, Stack Pointer, Stack RAM, dan Konsep Subrutin

Arsitektur dan Organisasi

ORGANISASI INTERNAL PROSESOR Oleh: Priyanto

KONFIGURASI PIN-PIN MIKROPROSESOR Z 80. Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia

Sistem Mikroprosessor

Pertemuan ke 7 Mode Pengalamatan. Computer Organization Eko Budi Setiawan

MIKROPROSESOR REGISTER-REGISTER MIKROPROSESOR INTEL

BAB I PENDAHULUAN. A. Deskripsi. B. Prasyarat. C. Petunjuk Penggunaan Modul. 1. Bagi Guru/Fasilitator

R E G I S T E R. = Code Segment Register = Data Segment Register = Stack Segment Register = Extra Segment Register. 3.

MODE OPERASI TIMER/COUNTER. Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY

BAHASA MESIN. PDE - bahasa mesin 1

INSTRUKSI DAN BAHASA PEMOGRAMAN MIKROKONTROLER

MODUL I PENGENALAN ASSEMBLY

Architecture. Architecture. Microprocessor Architecture. Microprocessor Architecture. Microprocessor Architecture 8/4/2011

BAB 2 LANDASAN TEORI. Dalam bab ini penulis akan membahas tentang komponen-komponen yang

TEKNIK MIKROPROSESOR

Simple As Posible 2 (bag-1)

Sistem Komputer. Tiga komponen utama : CPU

Hanif Fakhrurroja, MT

DASAR INPUT/OUTPUT (2) (PORT PPI DAN PORT 1 SEBAGAI INPUT/OUTPUT)

Gambar 1.1. Diagram blok mikrokontroller 8051

Kumpulan instruksi lengkap yang dimengerti

PENGANTAR MIKROKOMPUTER PAPAN TUNGGAL (SINGLE CHIP) Oleh : Sumarna, Jurdik Fisika, FMIPA UNY

BAB I TUGAS MATA KULIAH SISTEM MIKROPROSESOR DOSEN PEMBERI TUGAS : FATAH YASIN, ST, MT.

I/O dan Struktur Memori

Transkripsi:

PERCOBAAN 5 STACK DAN SUBROUTINE Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY E-mail : sumarna@uny.ac.id Tujuan dari percobaan ini adalah untuk memberikan pengertian mengenai arti stack, dapat menggunakan stack dalam pemrograman, dan memahami teknik merancang program yang menggunakan subroutine. 5.1. STACK Dalam merancang 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 masuk terakhir 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 (hardware) yaitu shift register atau RAM pada umumnya. Dalam sistem mikroprosesor Z80, programmer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada RAM dengan 1, kemudian dimasukkan ke dalam petunjuk stack (stack Pointer atau SP) pada CPU. Progam dan diagram berikut ini menggambarkan operasi stack. RAM RAM oleh perintah (9) oleh perintah (3) Nilai awal SP 1FAF F A L H F A L H oleh perintah (10) oleh perintah (12) oleh perintah (14) oleh perintah (16) oleh perintah (17) F A L H C B E D Memasukkan (PUSH) data pada stack Mengambil (POP) data dari stack 26

(1) LD SP,IFAFh Stack pointer di-set pada IFAFh, yaitu daerah RAM dengan address kurang dari atau sama dengan IFAEh ditunjuk sebagai stack. (2) DEC SP Kurangi SP dengan 1. Stack pointer berada pada IFAEh, yaitu di bagian bawah stack. (3) LD (SP),H Masukkan isi register H ke memory (RAM) address IFAEh. (4) DEC SP Kurangi lagi SP dengan 1. SP bergerak ke atas. (5) LD (SP),L tempatkan isi l pada bagian atas stack (yaitu di atas H) (6) DEC SP (7) LD (SP),A Tempatkan isi A pada bagian atas stack (yaitu di atas L) (8) DEC SP (9) LD (SP),F Tempatkan isi F di atas stack (yaitu di atas 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 ke bawah. (12) LD B,(SP) Ambil (pop) data dari atas stack. (13) INC SP (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). Dari gambaran operasi stack di atas, terlihat bahwa data dapat disimpan pada RAM dengan menggunakan SP sebagai penunjuk (pointer). SP dikurangi dengan 1 (DEC SP) bilamana ada satu byte data yang disimpan dan area stack menjadi lebih besar. SP akan ditambah dengan 1 (INC SP) bilamana ada satu byte data yang diambil dari area stack 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 27

secara otomatis dengan suatu rangkaian khusus. Stack dapat juga digunakan untuk menyimpan alamat (atau data) 16 bit. Dalam sistem Z80 ada perintah untuk memasukkan pasangan register 16 bit ke dalam stack serta mengambil data 16 bit dari stack. Dalam tiap-tiap operasinya, SP dikurangi atau ditambah dengan 2. Program di bawah ini mempunyai fungsi yang sama dengan program di atas. LD SP,1FAFh ; sama dengan perintah (1) PUSH HL ; sama dengan perintah (2), (3), (4), (5) PUSH AF ; sama dengan perintah (6), (7), (8), (9) POP BC ; sama dengan perintah (10), (11), (12), (13) POP DE ; sama dengan perintah (14), (15), (16), (17) Perintah PUSH dan POP dapat juga digunakan untuk menyimpan data sementara pada register, dapat pula digunakan untuk mentransfer data ke register. Contohnya adalah sebagai berikut : 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 bahwa jumlah perintah PUSH sama dengan jumlah perintah POP dalam operasi stack. 5.2. SUBROUTINE Program-program aritmatik (penjumlahan, pengurangan, perkalian, atau pembagian), keyboard, kontrol display, dll. sering kali digunakan sebagai bagian dari suatu program yang besar dalam aplikasi praktis. Jika programmer harus menuliskan kembali program-program kecil tersebut setiap kali dibutuhkan, tentulah akan sangat panjang dan menjemukan. Untuk menghemat memori dan mengurangi kesalahan subroutine sering digunakan dalam program yang besar. Perintah CALL dan RET 28

digunakan untuk memanggil atau menunjuk subroutine yang akan dipakai. Subroutine dapat dilaksanakan tanpa syarat atau menurut status/keadaan flag. Perintah CALL pada program utama digunakan untuk memanggil subroutine. Fungsinya terdiri dari dua operasi seperti digambarkan di bawah ini. sama dengan : CALL 1A38h ; memanggil subroutine yang tersimpan di alamat 1A38h PUSH PC ; memasukkan (PUSH) PC saat itu ke stack JP 1A38h ; lomcat ke alamat 1A38h dan melanjutkan pelaksanaan program. Perintah RET tidak memerlukan operand (instruksi 1 byte), sama dengan perintah POP PC. RET sama dengan : ; kembali ke program asal dan melanjutkan pelaksanaan program POP PC ; mengambil data 16 bit dari stack dan memasukkan ke PC, kemudian melaksanakan program sesuai isi PC. Memanggil suatu subroutine adalah langkah yang penting dalam suatu program. Subroutine dalam suatu program dapat berbentuk saling bersarang (dalam satu subroutine terdapat subroutine lain). Untuk lebih jelasnya hubungan itu dapat digambarkan sebagai berikut. Program Utama Subroutine 1 CALL 1 CALL 1 CALL 2 CALL 2 RET Subroutine 2 RET 29

Biasanya, subroutine disediakan oleh pabrik pembuat mikroprosesor. Pemakai hanya perlu mengetahui cara penggunaannya. Jika subroutine dibuat oleh pemakai sendiri, hal-hal berikut ini perlu dipertimbangkan dalam merancang subroutine : 1. Nama subroutine sebaiknya menggunakan istilah yang mudah diingat. 2. Bagaimana mendapatkan data yang dibutuhkan dalam subroutine sebelum menjalankannya. 3. Bagaimana menyatakan hasil pelaksanaan subroutine itu. 4. Register mana yang akan berubah setelah pelaksanaannya. 5. Berapa besar memori yang akan ditempati oleh subroutine dan berapa lama waktu yang dibutuhkan oleh CPU untuk melaksanakan subroutine tersebut. Hal-hal berikut ini harus diperhatikan bila suatu subroutine dipanggil oleh program utama : 1. Data yang dibutuhkan oleh subroutine harus disimpan. 2. Register-register yang tidak boleh berubah setelah pelaksanaan subroutine tersebut harus disimpan dalam stack sebelum memanggil subroutine itu. 3. Hasil yang diperoleh dari pelaksanaan subroutine akan diproses dengan metode yang digambarkan dalam subroutine. Percobaan 5.1 : Dalam program berikut, loop kecil dikelilingi oleh loop besar. Fungsi program berikut untuk menggeser semua data 8 bit pada alamat 1A00h s/d 1A20h ke kiri 4 bit. Gunakanlah register B sebagai penghitung loop untuk loop kecil dan besar. Masukkanlah program iru ke dalam MPF-I dan jalankan. Diskusikan hasilnya, dan mengapa register B dapat digunakan sebagai penghitung untuk kedua loop. LOOP1 : Org 1800h LD B,21h LD HL,1A00h PUSH BC 30

LD A,(HL) LD B,04h LOOP2 : ADD A,A DJNZ LOOP2 LD (HL),A INC HL POP BC DJNZ LOOP1 HALT Percobaan 5.2 : Program berikut subroutine bernama MADD yang dapat digunakan untuk penjumlahan multi byte dari BCD. Register HL dan DE sebagai register masukan. Register HL menunjuk byte orde rendah dari bilangan yang dijumlahkan. Register DE menunjuk byte orde rendah dari bilangan penambah. Register B menunjuk cacah byte, 1 byte = 2 digid BCD. Register keluarannya adalah IX yang menunjuk byte bilangan orde rendah yang dihasilkan. Register yang berubah adalah AF, B, DE, HL, dan IX. Memori yang digunakan 15 byte. Org 1800h MADD : XOR A MADD1 : LD A,(DE) ADD A,(HL) DAA LD (IX),A INC DE INC HL INC IX DJNZ MADD1 RET ; 10F4 31

Dua data BCD 4 byte disimpan pada memori dengan alamat awal 1A00h dan 1A40h. Untuk menjumlahkan dua data BCD ini bersama-sama dan menyimpan hasilnya pada alamat awal 1A08h. Program utama untuk memanggil subroutine MADD tersebut adalah sebagai berikut. Org 1900h LD B,04h LD HL,1A00h LD DE,1A40h LD IX,1A08h CALL MADD RST 38h ; CD0018 Sebagai sampel, gunakanlah data pada alamat-alamat berikut, cocokan hasilnya dengan perhitungan secara manual. 1A00 10h 1A40 20h 1A08. 1A01 11h 1A41 21h 1A08. 1A02 12h 1A42 22h 1A08. 1A03 13h 1A43 23h 1A08. Percobaan 5.3 : Dengan memanggil subroutine yang diberikan pada percobaan 5.2 (routine penjumlahan multi byte BCD), rancanglah sebuah program untuk menjumlahkan dua buah data 8 byte yang tersimpan pada alamat awal 1A00h dan 1A08h. Hasilnya harus disimpan pada memori 8 byte yang dimulai pada alamat 1A00h. Sebagai pertimbangan, gunakanlah algorithma berikut : 1. Mulai penulisan program pada alamat 1900h. 2. Masukkan konstanta 08h ke register B 3. Masukkan konstanta (sebagai alamat) 1A00h ke pasangan register HL. 4. Masukkan konstanta (sebagai alamat) 1A08h ke pasangan register DE. 5. Masukkan konstanta (sebagai alamat) 1A00h ke pasangan register IX. 32

6. Panggil subroutine MADD. 7. Kembali ke program monitor. Percobaan 5.4 : Rancanglah subroutine untuk mengubah data 16 bit pada HL menjadi komplemen-2 nya, dan kemudian tuliskan program utama untuk mengubah data pada IX dan IY menjadi komplemen-2 nya. Masukkan program ke MPF-I dan jalankan. Periksa hasilnya, kemudian cocokkan dengan hasil pengubahan secara manual. Sebagai pertimbangan, gunakan algorithma untuk subroutine seperti berikut : 1. Mulai penulisan subroutine pada alamat awal 1900h 2. Masukkan isi H ke dalam A. 3. Negatifkan isi A. 4. Kurangi isi A dengan 1. 5. Masukkan isi A ke dalam H. 6. Masukkan isi L ke dalam A. 7. Negatifkan isi A. 8. Masukkan isi A ke dalam L. 9. Kembali ke program semula (RET). Algorithma untuk program utamanya adalah sebagai berikut : 1. Mulai penulisan program pada alamat awal 1800h 2. Masukkan isi IX ke dalam lokasi yang alamatnya ditunjukkan di 1A00h. 3. Masukkan isi lokasi yang alamatnya ditunjukkan di 1A00h ke dalam HL. 4. Panggil subroutine yang dimulai pada alamat 1900h (CD0019). 5. Masukkan isi HL ke dalam lokasi yang alamatnya ditunjukkan di 1A00h. 6. Masukkan isi lokasi yang alamatnya ditunjukkan di 1A00h ke dalam IX. 7. Masukkan isi IY ke dalam lokasi yang alamatnya ditunjukkan di 1A00h. 8. Masukkan isi lokasi yang alamatnya ditunjukkan di 1A00h ke dalam HL. 9. Panggil subroutine yang dimulai pada alamat 1900h. 10. Masukkan isi HL ke dalam lokasi yang alamatnya ditunjukkan di 1A00h. 11. Masukkan isi lokasi yang alamatnya ditunjukkan di 1A00h ke dalam IY. 12. Kembali ke program monitor. 33

Dengan menggunakan routine di atas yang meng-komplemen-2 kan pasangan register HL, tulislah program untuk mengurangi data pada IY dengan DE dan menyimpan hasilnya pada IY. Sebagai pertimbangan, gunakanlah algorithma berikut : 1. Mulai penulisan program pada alamat awal 1800h 2. Masukkan isi IY ke dalam lokasi yang alamatnya ditunjukkan di 1A00h. 3. Masukkan isi lokasi yang alamatnya ditunjukkan di 1A00h ke dalam HL. 4. Panggil subroutine yang dimulai pada alamat 1900h. 5. Jumlahkan data yang ada di HL dan DE. 6. Panggil subroutine yang dimulai pada alamat 1900h. 7. Masukkan isi HL ke dalam lokasi yang alamatnya ditunjukkan di 1A00h. 8. Masukkan isi lokasi yang alamatnya ditunjukkan di 1A00h ke dalam IX. 9. Kembali ke program monitor. Masukkan program-program di atas (bergantian) ke MPF-I dan jalankan. Periksalah hasilnya, kemudian cocokkan dengan hasil pengubahan secara manual. 34