Top Banner
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

SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

Dec 13, 2020

Download

Documents

dariahiddleston
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: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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

Page 2: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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)

Page 3: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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.

Page 4: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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 :

Page 5: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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.

Page 6: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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

Page 7: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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.

Page 8: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

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

CALL MADD

D. HASIL PERCOBAAN

1. Percobaan 1

Alamat Data Alamat Data

H 00 H’ 01

L 01 L’ 02

D 02 D’ 03

E 03 E’ 04

B 04 B’ 05

C 05 C’ 06

2. Percobaan 2

a. Program

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

Page 9: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

9 Yudi Irwanto_021500456

b. Data

Alamat Data Alamat Data

1A00H 00 1A17H 70

1A01H 10 1A18H 80

1A02H 20 1A19H 90

1A03H 30 1A20H 00

1A04H 40 1A21H 10

1A05H 50 1A22H 20

1A06H 60 1A23H 1A

1A07H 70 1A24H 40

1A08H 80 1A25H 50

1A09H 90 1A26H 60

1A10H 00 1A27H 70

1A11H 10 1A28H 80

1A12H 20 1A29H 90

1A13H 30 1A30H 00

1A14H 40 1A31H 10

1A15H 50 1A32H 20

1A16H 60

3. Percobaan 3

a. Program

- Sub Routine

1900 AF 9 MADD XOR A

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

- Main Program

1800 06 08 LD B,4

1802 21 00 1A LD HL, 1A00H

1805 11 40 1A LD DE, 1A40H

1808 DD 21 00 1A LD IX, 1A08H

180C CD 00 19 CALL MADD

b. Data

Alamat Data Alamat Data Alamat Data

1A00 H 20 1A40 H 10 1A00 H 30

1A01 H 20 1A41 H 10 1A01 H 30

1A02 H 20 1A42 H 10 1A02 H 30

1A03 H 20 1A43 H 10 1A03 H 30

1A04 H 20 1A44 H 10 1A04 H 30

1A05 H 20 1A45 H 10 1A05 H 30

1A06 H 20 1A46 H 10 1A06 H 30

1A07 H 20 1A47 H 10 1A07 H 30

Page 10: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

10 Yudi Irwanto_021500456

4. Percobaan 4

a. Program

- Sub Routine

1900 AF 9 MADD XOR A

1901 1A 10 MADD1 LD A,(DE)

1902 96 11 SUB (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

- Main Program

1800 06 08 LD B,4

1802 21 00 1A LD HL, 1A00H

1805 11 40 1A LD DE, 1A40H

1808 DD 21 00 1A LD IX, 1A08H

180C CD 00 19 CALL MADD

b. Data

Alamat Data Alamat Data Alamat Data

1A00 H 10 1A40 H 20 1A00 H 10

1A01 H 10 1A41 H 20 1A01 H 10

1A02 H 10 1A42 H 20 1A02 H 10

1A03 H 10 1A43 H 20 1A03 H 10

1A04 H 10 1A44 H 20 1A04 H 10

1A05 H 10 1A45 H 20 1A05 H 10

1A06 H 10 1A46 H 20 1A06 H 10

1A07 H 10 1A47 H 20 1A07 H 10

5. Percobaan 5

1) Komplemen HL

- Subroutine

1900H 7C LD A, H Memasukkan isi reg H ke reg A

1901H 2F CPL Reg A dikomplemenkan

1902H 67 LD H,A Memasukkan reg A ke reg H

1903H 7D LD A,L Memasukkan reg L ke reg A

1904H 2F CPL Reg A dikomplemenkan

1905H 6F LD L,A Memasukkan isi reg A ke reg L

1906H C9 RET RET Kembali ke program utama.

1907H FF RST 38H Kembali ke monitor

- Main program

Alamat Bahasa mesin label instruksi keterangan

1800H 21 BB 55 LD HL, 55BB Memasukkan 55BBH pada reg

HL

1803H CD 00 19 CALL

MADD

CALL M,

1900H

Memanggil alamat 1900H

1806H FF RST 38H Kembali ke monitor

Page 11: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

11 Yudi Irwanto_021500456

- Data

Reg HL awalnya adalah 55BBH.

Reg HL menjadi AA44H.

Pembuktian

2) Komplemen IX dan IY

- Program

Alamat Bahasa mesin label instruksi keterangan

1800H 31 00 1A LD SP, IA00H Memasukkan 1A00H ke reg

SP

1803H 21 00 1A LD HL, 1A00H Memasukkan 1A00H ke reg

HL

1806H 06 04 LD B,4 Memasukkan 4 ke register B

1808H DD 21 BB 55 LD IX, 55BBH Isi register IX dengan 55BBH

180CH FD 21 44 AA LD IY, AA44H Isi register IY dengan AA44H

1810H DD E5 PUSH IX Mengambil isi register IX ke

SP

1812H FD E5 PUSH IY Mengambil isi register IY ke

SP

1814H 2B Loop DEC HL Mengurangi isi register HL

dengan 1

1815H 7E LD A, (HL) Memasukkan alamat pada

register HL ke register A

1816H 2F CPL Komplemen register A

1817H 77 LD (HL), A Memasukkan register A ke

alamat register HL

1818H 10 FA DJNZ, Loop Loop ke alamat 1814H

181AH FD E1 POP IY Mengambil data dari SP ke

register IY

181CH DD E1 POP IX Mengambil data dari SP ke

register IX

181EH FF RST 38H Kembali ke monitor

- Data

BEFORE AFTER

Register IX 55 BB Register IX AA 44

Register IY AA 44 Register IY 55 BB

Page 12: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

12 Yudi Irwanto_021500456

Pembuktian

E. PEMBAHASAN

Praktikum “Stack dan Subroutine” ini bertujuan agar mahasiswa mengerti arti dan

penggunaan stack serta mengerti teknik merancang program dan penggunaan subroutine.

Pada praktikum ini terdapat lima percobaan, yaitu membuat dan menjalankan program

untuk memindahkan data secara berturut-turut; membuat dan menjalankan program untuk

menggeser data 8 bit ke kiri 4 bit; membuat dan menjalankan program untuk penambahan

dua data 8 byte; membuat dan menjalankan program untuk pengurangan dua data 8 byte;

serta membuat dan menjalankan program untuk mengkomplemenkan isi register.

Pada percobaan pertama ini praktikan diinstruksian untuk memindahkan berturut

– turut data pada HL, DE, BC ke HL”, BC”, DE”. Pada percobaan kali ini pratikan

menggunakan instruksi EXX yang berfungsi untuk menukar isi register HL, BC, DE ke

HL”, BC”, DE”. Langkah awal praktikan mengisi register H = 00, L = 01, D = 02, E =

03, B = 04, C = 05. Kemudian praktikan menginstruksikan LD SP, 1900H yang

berfungsiuntukmengeset stack pointer padaalamat 1900H. kemudian digunakan instruksi

push HL, push DE, push BC yang berfungsi untuk menyimpan sementara isi register dari

register HL, DE, BC ke stack pointer. Kemudian untuk memindahkan isi register di stack

pointer pada HL”, BC”, dan DE” digunakan instruksi EXX.

Percobaan kedua adalah menggunakan program loop kecil yang dikelilingi oleh

loop besar. Fungsi program ini menggeser semua data 8 bit pada alamat 1A00H – 1A20H

ke kiri 4 bit dengan menggunakan register B sebagai penghitung loop untuk loop kecil

dan besar. Pada percobaan ini, data pada register HL dengan alamat 1A00H akan

bergeser 4 byte. Program ini melibatkan instruksi B loop 21H, dimana reg HL dengan

alamat 1A00H akan mengambil reg BC di SP dan menaruh data pada reg HL ke alamat

A. Instruksi looping bekerja sebanyak 4x loop. Sehingga menambah data A dengan data

A. Instruksi loop akan mengarahkan program kembali dan menaruh data A ke reg HL.

Reg HL akan bertambah dan instruksi loop kembali ke reg HL 1A00H. Sesuai data hasil

percobaan, reg HL 1A00H menghasil kan data 00, karena berapapun banyak nilai loop

alamat 00 tidak akan menghasilkan data. Sedangkan pada reg HL dengan alamat 1A01H

data bergeser 4 byte ke kiri artinya 0000 0001 menjadi 00010000 sehingga data bernilai

10. Hal yang serupa dapat dibuktikan pada reg HL dengan alamat 1A02 , 0000 0010

bergeser menjadi 0010 000, sehingga data yang terbaca adalah 20.

Percobaan ketiga adalah membuat dan menjalankan program untuk penambahan

dua data 8 byte. Data yang ditambahkan ada pada alamat 1A00 H dan 1A40 H, hasilnya

disimpan di 1A00 H. Ada dua program yang digunakan dalam percobaan ini, yaitu main

program dan subroutine. Main program dimulai dengan mengatur jumlah byte menjadi 8

byte dengan LD B, 8. Lalu register HL menunjuk alamat 1A00 H sebagai alamat

dimulainya data akan ditambah dengan LD HL, 1A00 H. Lalu register DE menunjuk

alamat 1A40 H sebagai alamat dimulainya data penambah dengan LD DE, 1A40 H. Lalu

IX menunjuk alamat 1A00 H sebagai alamat dimulainya data hasil penjumlahan data

pada 1A00 H dan 1A40 H. Lalu main program memanggil subroutine dengan CALL

Page 13: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

13 Yudi Irwanto_021500456

MADD. Program masuk ke subroutine dengan MADD XOR A. Lalu subroutine

mengambil data dari data alamat 1A40 H yang ditunjuk DE sebagai penambah dengan

MADD1 LD A, (DE). Lalu subroutine menambahkan data tersebut dan data alamat 1A00

H yang ditunjuk HL dengan ADD A, (HL). Data hasil penjumlahan tersebut akan diubah

menjadi bilangan decimal oleh DAA. Lalu data tersebut akan disimpan di alamat 1A00 H

yang ditunjuk IX dengan LD (IX), A. Lalu nilai alamat yang ditunjuk DE naik satu heksa,

1A01 H dan seterusnya. Lalu nilai alamat yang ditunjuk HL naik satu heksa, 1A41 H dan

seterusnya. Lalu B sebagai penghitung loop yang diatur 8 byte berarti akan mengulang

sebanyak delapan kali dengan DJNZ MADD1. Lalu program akan kembali ke main

program dengan RET. Lalu main program akan berhenti dengan FF. Dari program

tersebut dapat dianalisa bahwa hasil penjumlahan data pada alamat 1A40 H dan 1A00 H

akan tersimpan di 1A00 H, dan seterusnya. Contohnya pada alamat 1A40 H berisi data 10

dan pada alamat 1A00 H berisi data 20 maka setelah program dijalankan isi data alamat

1A00 H akan menjadi 30 sebagai hasil penjumlahan 10 dan 20 desimal, dan seterusnya.

Percobaan keempat adalah membuat dan menjalankan program untuk

pengurangan dua data 8 byte. Data yang dikurangkan ada pada alamat 1A00 H dan 1A40

H, hasilnya disimpan di 1A00 H. Ada dua program yang digunakan dalam percobaan ini,

yaitu main program dan subroutine. Main program dimulai dengan mengatur jumlah byte

menjadi 8 byte dengan LD B, 8. Lalu register HL menunjuk alamat 1A00 H sebagai

alamat dimulainya data akan dikurang dengan LD HL, 1A00 H. Lalu register DE

menunjuk alamat 1A40 H sebagai alamat dimulainya data pengurang dengan LD DE,

1A40 H. Lalu IX menunjuk alamat 1A00 H sebagai alamat dimulainya data hasil

pengurangan data pada 1A00 H dan 1A40 H. Lalu main program memanggil subroutine

dengan CALL MADD. Program masuk ke subroutine dengan MADD XOR A. Lalu

subroutine mengambil data dari data alamat 1A40 H yang ditunjuk DE sebagai pengurang

dengan MADD1 LD A, (DE). Lalu subroutine menambahkan data tersebut dan data

alamat 1A00 H yang ditunjuk HL dengan SUB (HL). Data hasil pengurangan tersebut

akan diubah menjadi bilangan decimal oleh DAA. Lalu data tersebut akan disimpan di

alamat 1A00 H yang ditunjuk IX dengan LD (IX), A. Lalu nilai alamat yang ditunjuk DE

naik satu heksa, 1A01 H dan seterusnya. Lalu nilai alamat yang ditunjuk HL naik satu

heksa, 1A41 H dan seterusnya. Lalu B sebagai penghitung loop yang diatur 8 byte berarti

akan mengulang sebanyak delapan kali dengan DJNZ MADD1. Lalu program akan

kembali ke main program dengan RET. Lalu main program akan berhenti dengan FF.

Dari program tersebut dapat dianalisa bahwa hasil pengurangan data pada alamat 1A40 H

dan 1A00 H akan tersimpan di 1A00 H, dan seterusnya. Contohnya pada alamat 1A40 H

berisi data 20 dan pada alamat 1A00 H berisi data 10 maka setelah program dijalankan isi

data alamat 1A00 H akan menjadi 10 sebagai hasil pengurangan 10 dan 20 desimal, dan

seterusnya.

Percobaan kelima adalah menjalankan program untuk mengkomplemenkan isi

register. Yang pertama mengkomplemenkan isi register HL dan yang kedua

mengkomplemenkan isi register IX dan IY. Praktikan membuat 2 program, yakni

program utama dan subroutine-nya. Pada program utamanya, praktikan memasukkan

alamat 55BBH pada register HL yang akan dikomplemenkan. Kemudian memanggil

alamat Subroutine-nya dengan instruksi CALL M, 1900H. Pada program subroutine-nya,

praktikan memasukkan isi reg H pada reg A, kemudian mengklomenkannya dengan

instruksi CPL. Instruksi CPL hanya dapat digunakan pada register A, oleh karenanya

disimpan pada isi reg A terlebih dahulu. Setelah dikomplemenkan, praktikan hasil

pengkomplemenannya ke register H lagi. Setelah itu, praktikan juga memasukan isi

register L ke reg A, kemudian dilakukan pengkomplemenan dengan instruksi CPL.

Barulah dipindahkan kembali ke register L. Setelah itu digunakan instruksi RET dengan

maksud untuk kembali ke program utama. Dan setelah itu program selesai.

Page 14: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

14 Yudi Irwanto_021500456

Pada percobaan 5 ini juga, yakni melakukan komplemen pada register IX dan IY.

Dengan menggunakan Stack pointer (SP), maka isi register IX dan IY dapat

dikomplemenkan. Pertama, praktikan melakukan penginisialisasian pada register HL, IX,

dan IY dengan instruksi LD HL, 1A00H; LD IX, 55BBH; LD IY, AA44H. kemudian

mengeset SP pada alamat 1A00H. isi register IX dan IY inilah yang akan

dikomplemenkan. Setelah melakukan penginisialisasian, isi register IX dan IY disimpan

pada Stack Pointer (SP) dengan instruksi PUSH IX dan PUSH IY. Kemudian praktikan

mengisi register B dengan 4H. pengisian pada isi register B ini bertujuan untuk

banyaknya pengeloop-an terjadi. Dengan melakukan pengurang 1H pada HL yakni DEC

HL, isi alamat HL dimasukan pada register A dengan instruksi LD A,(HL). Kemudian

barulah dilakukan pengkomplemenan, dimana intruksi CPL hanya bisa pada register A,

itulah sebabnya isi register HL dipindahkan pada reg A. setelah dikomplemen, isi reg A

dikembalikan pada isi reg HL. Apabila nilai B belum bernilai 0, maka looping akan terus

terjadi sebanyak 4kali. Namun apabila isi register B telah sama dengan 0, maka proses

dilanjutkan pada pengambilan data yang disimpan pada SP menuju isi register IY dan IX

dengan menggunakan instruksi POP. Sebagai hasilnya, dapat dilihat pada isi register IX

dan IY telah terkomplemen, dan hasil komplemennya telah dibuktikan dan bernilai benar.

F. KESIMPULAN

1. Stack merupakan suatu instruksipenyimpan data sementara yang data tersebut

dapat dipindah ke alamat lain dengan bantuan instruksi pemanggil CALL.

2. Subroutine merupakan suatu program yang besar dalam aplikasi praktis untuk

menghemat memori dan mengurangi kesalahanp pada perhitungan aritmatik

(penambahan,pengurangan,perkalian atau pembagian), keyboard, kontrol display.

3. RET yaitu suatu instruksi yang dijalankan agar suatu program yang dijalankan

kembali ke programasal dan melanjutkan pelaksana program.

Page 15: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

15 Yudi Irwanto_021500456

G. FLOW CHART

1. Percobaan 1

Page 16: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

16 Yudi Irwanto_021500456

2. Percobaan 2

Page 17: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

17 Yudi Irwanto_021500456

3. Percobaan 3

TIDAK

Inisialisasi

LD HL, 1A00H

LD DE, 1A40 H

LD IX, 1A00 H

STOP

MADD1 LD A, (DE)

ADD A, (HL)

DAA

LD (IX), A

INC DE

INC HL

RST 38H

RET

CALL MADD 1900 H

START

DJNZ MADD1

(B NOT 0)

MADD XOR A

Page 18: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

18 Yudi Irwanto_021500456

4. Percobaan 4

TIDAK

Inisialisasi

LD HL, 1A00H

LD DE, 1A40 H

LD IX, 1A00 H

STOP

MADD1 LD A, (DE)

SUB (HL)

DAA

LD (IX), A

INC DE

INC HL

RST 38H

RET

CALL MADD 1900 H

START

DJNZ MADD1

(B NOT 0)

MADD XOR A

Page 19: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

19 Yudi Irwanto_021500456

5. Percobaan 5

a. Komplemen HL

b.

START

Inisialisasi register HL

reg HL

terkomplemenkan STOP

LD A, H

CPL

LD H, A

LD A, L

CPL

LD L, A

RST 38H

RET

CALL M, 1900H

Page 20: SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA ......mikroprosesor Z80, programer dapat menentukan daerah pada RAM sebagai stack. Caranya ialah dengan menambah alamat tertinggi pada

20 Yudi Irwanto_021500456

a. Komplemen HL

b.

c.

d.

e.

f.

g.

h.

i.

j.

k.

l.

m.

n.

o.

p.

q.

r. TIDAK

s.

t.

YA

u.

Inisialisasi

LD SP, 1A00H

LD HL, 1A00H

LD IX, 55BBH

LD IY, AA44H

Isi reg IX dan IY

terkomplemenkan STOP

LD B, 4

DEC HL

LD A, (HL)

CPL

LD (HL), A

RST 38H

POP IX

POP IY

PUSH IX

PUSH IY

START

DJNZ

REG B=0?