Anda di halaman 1dari 14

Mengenal Learning System LS Z80

0. Pengantar
• Mikroprosesor yang akan kita bahas dalam mata kuliah Sistem Tertanam adalah “Zilog Z80”. Lebih
lanjut kita akan merangkai suatu sistem mikrokomputer yang lengkap dengan menggunakan
mikroprosesor ini. Tetapi sebelumnya kita perlu mengenal cara pemrograman dengan menggunakan satu
sistem yang sudah jadi dan dibuat khusus untuk mempelajari tentang mikrokomputer yaitu dengan
menggunakan “Learning System LS Z80” dari perusahaan “Binary System”/Singapore.

• Mikroprosesor Z80 dibuat oleh perusahaan “Zilog”. Z80 merupakan mikroprosesor 8-Bit (Databus: 8-
Bit) yang paling canggih, sehingga dipakai dalam Personal Computer yang menggunakan sistem operasi
CPM. Perkembangan lebih lanjut dari CPM adalah DOS. Program-program dari CPM masih bisa
dijalankan dalam DOS. Program-program itu bersuffix (akhiran nama file) .COM.

• Dalam praktikum ini kita tidak akan menggunakan sistem operasi. Dalam Learning Sistem yang kita
gunakan sudah diprogram suatu sistem MONITOR. Sistem monitor itu berfungsi mirip dengan
DEBUGGER. Dengan monitor kita dapat melihat segala macam akses seperti misalnya melihat isi
register-register mikroprosesor atau isi memori, kita bisa mengubah semua data dan menjalankan
program-program yang kita buat.

• Kita menggunakan mikroprosesor Z80 karena untuk experiment Hardware, Z80 lebih sederhana
daripada mikroprosesor yang lain. Sedangkan untuk kemampuan software kita menggunakan bagian
perintah mesin yang kompatibel dengan seri mikroprosesor Intel 8080 dan Intel 8085. Sehingga untuk
sintax bahasa Assembler kita menggunakan yang dipakai oleh Intel bukan yang dari Zilog. Jadi kalau
Anda mencari buku-buku, untuk Hardware sebaiknya dipakai buku-buku tentang mikroprosesor Z80
dan untuk Software sebaiknya dipakai buku tentang Assembler untuk mikroprosesor Intel 8080/8085.

Ciri-ciri utama Hardware Z80:


• Mempunyai 16 Bit Addressbus. Jadi mempunyai ruang pengalamatan 64K, dan register pointer 16 bit
(PC,SP).
• Mempunyai 8 Bit Databus. Jadi register-register data juga 8 Bit (=1Byte).

Struktur Register:
8 bit 8 bit
A (Accu) Flags A (Accu/ Akumulator): Akumulator mengumpulkan segala macam data,
khususnya hasil-hasil perhitungan yang selalu disimpan dalam Accu.
B C B,C (8-Bit General Purpose Registers): BC dapat menjadi pasangan register
data yang mempunyai pointer 16 Bit dengan B sebagai High Byte dan C
sebagai Low Byte.
D E D,E (8-Bit General Purpose Registers): DE dapat menjadi pasangan register
data yang mempunyai pointer 16 Bit dengan D sebagai High Byte dan E sebagai
Low Byte.
H L H,L: Pointer-Register. Sebagai operand Assembler disebut M, yaitu [HL], tetapi
juga bisa dipakai sebagai General Purpose Register
PC PC: Program Counter (menunjuk ke alamat dengan perintah mesin yang akan
dikerjakan)
SP SP: Stack Pointer (menunjuk ke alamat yang merupakan puncak Stack)

16 bit

Hans-Jurgen Belling & Gogor C. Setyawan


Struktur masing-masing Flag dalam Register Flag:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Sign-Flag Zero-Flag tidak Half- tidak Parity Flag tidak Carry-Flag
dipakai Carry-Flag dipakai dipakai

Cara memrogram dengan LS Z80:

Dalam Flowchart ini kita bisa melihat


Membuat Program langkah-langkah untuk mengembangkan
untuk LS Z80
Nomor kegiatan
satu program untuk LS Z80. Ada tiga
langkah:

Ada problem atau soal 1. Program atau soal harus dianalisa dan
dipecahkan agar menghasilkan suatu
yang harus dikerjakan.
struktur data dan suatu algoritma yang
dapat diprogram. Algoritma tersebut
Menganalisa
agar 1 ditampilkan dalam bentuk Flowchart atau
dapat algoritma menjelaskannya dengan kata-kata. Tetapi
untuk bahasa Assembler Flowchart sangat
Flowchart efisien!

2. Kemudian kita harus


Implementasikan mengimplementasikan algoritma yang
algoritma
dengan bahasa Assembler 2 sudah dihasilkan, dengan menggunakan
(Pilih register, operand dan bahasa Assembler. Untuk implementasi
perintah untuk realisasi) tersebut kita harus memikirkan cara
bagaimana untuk mengakseskan
Program Assembler
(mengalamatkan) data-data kita, memilih
(belum ada alamat, ...)
register/operand dan perintah-perintah
assembler yang sesuai. Untuk melakukan
Mengassemblerkanprogram hal di atas kita harus belajar bagaimana
itu memrogram dengan bahasa Assambler.
dengan A) menentukan alamat
awal, B) mencari opcode- 3
opcode 3. Suatu perintah dalam bahasa Assembler
untuk setiap perintah dan C) belum dapat dipahami oleh mikroprosesor.
mengganti label-label dengan Oleh sebab itu perlu mengassemblerkan
JUMP-alamat. program dari langkah 2 sehingga didapat
Opcode opcode-opcode. “Opcode” (Operation
Code) adalah perintah-perintah yang dapat
dipahami dan dikerjakan oleh
Memasukkan Opcode 4 mikroprosesor. Untuk langkah di atas,
itu maka kita harus mencari opcode untuk
dalam User-Memory setiap perintah Assambler. Kita juga perlu
tahu suatu perintah tertentu yang harus
Selesai, disimpan pada alamat tertentu pula. Hal
tinggal test/debug tersebut penting , sebab nanti kita akan
menyimpan program ke dalam memori
pada alamat yang kita tentukan dan ada sebagian perintah yang memerlukan alamat dalam opcode
(misal: perintah percabangan JUMP label atau CALL label). Terutama kita harus menghitung alamat
label itu dan mengisinya dalam opcode sendiri. Juga ada konstanta-konstanta yang harus dimasukkan
dalam opcode.
4. Memori di mana kita bisa menyimpan program-program kita di LS Z80 disebut “User-Memory”. Lokasi
User-Memory ada pada alamat 2100h..27FFh. Opcode-opcode yang telah ditentukan harus sesuai
dengan ruang alamat User-Memori. Sekarang tinggal kita memasukkan program (opcode-opcode) pada
alamat-alamatnya.

Hans-Jurgen Belling & Gogor C. Setyawan


Pada prinsipnya semakin lanjut langkah pengembangan program akan semakin sederhana. Langkah
keempat biasanya dibuat otomatis oleh sistem operasi dan langkah ketiga bisa dibuat oleh program, yaitu
dengan Assembler atau compiler. Juga langkah kedua masih sederhana: Membuat satu program kalau
algoritmanya dan struktur data sudah diketahui. (Itu pekerjaan programmer.) Tetapi langkah pertama
paling sulit, karena kita harus memecahkan satu problem menjadi struktur data dan algoritma. Itulah tujuan
studi Anda.

Kalau kita sudah dapat opcode dan sudah memasukkan opcode itu ke dalam memori di LS Z80, tinggal kita
menjalankan program kita. Kalau programnya tidak berfungsi, kita harus mencari kesalahan. Tergantung
kesalahannya, mungkin kita harus memperbaiki atau mengulangi langkah 4 (memasukkan opcode), langkah
3 (mengasseblerkan), langkah 2 (memrogram) atau langkah 1 (memperbaiki algoritma kita).

Contoh pengembangan program sederhana: Loop perhitungan 3..0

1. Menganalisa problemnya.
Satu variable harus pada awal=3 dan kemudian beberapa kali dikurangi dengan 1 sampai variable itu
menjadi 0.

Counter 3..0

Variable = 3

Ulang

Variable dikurangi
dengan 1

Tidak

Variable = 0 ?

Ya

END

2. Membuat program
• Penentuan struktur data: Sebagai variable sebaiknya dipakai register A (Accu).
• Perintah pertama (Variable := 3) direalisasikan dengan perintah MOV A,3. Namun dalam sintax
Assambler 8085 tidak ada perintah MOV A,3 sehingga harus dipakai perintah MVI (move immediate =
load konstanta) dengan huruf “I” untuk menunjukkan cara pengalamatan “immediate” = konstanta.
• Untuk perintah berikutnya pada label “Ulang” (Variable dikurangi dengan 1) kita menggunakan perintah
“DCR A”.
• Perintah keputusan: Kalau syarat “Variable = 0” tidak digenapi maka kita harus bercabang ke label
“Ulang”. Kita menggunakan perintah “JNZ Ulang” yang berarti akan bercabang ke ulang apabila Zero-
Flag tidak aktif (Z<>0). Perintah sebelumnya (yaitu DCR A) mempengaruhi Zero-Flag dan membuat
Zero-Flag aktif bila hasil dari DCR A menjadi “0”. Apabila Zero-Flag menjadi aktif (Z=0), perintah JNZ
tidak akan bercabang, tetapi program akan berakhir.
• Sebagai perintah terakhir kita memilih perintah “HLT”, yang menghentikan seluruh kegiatan
mikroprosesor sampai direset.
• Untuk melakukan praktek kita harus mencatat program Assembler sesuai dengan cara-cara berikut:
(Bandingkan dengan program-listing berikut!)

Hans-Jurgen Belling & Gogor C. Setyawan


1. Buatlah 4 kolom untuk menuliskan alamat dan tiga byte opcode(O1, O2, O3). Hal tersebut
penting supaya pada langkah ke-3 (mengassamblerkan) kita tidak perlu menulis program lagi
2. Di sebelah kolom yang telah kita buat, secara teratur kita menuliskan semua unsur baris program
bahasa Assembler: Label, Perintah, Operand (-Operand) dan Komentar.

Alamat O1 O2 O3 Label Perintah Operand... Komentar

Start: MVI A,3 Variable := 3


Ulang: DCR A Variable dikurangi dgn. 1
JNZ Ulang Kalau A < > 0 bercabang ke UL
HLT Berhenti
Harus dipersiapkan!
Nanti diisi pada langkah 3!

3. Mengassemblerkan program
• Tentukanlah alamat awal dari program terlebih dahulu! Kita pilih alamat 2100 yang merupakan alamat
“default” (selalu dipakai kalau tidak ada alasan untuk memilih yang lain).

2100 Start: MVI A,3 Variable := 3

• Berikutnya kita mengisi Byte-Byte opcode untuk baris pertama dari program kita: Ada perintah MVI
A,3. Kita harus mencari pada lembar “opcode-opcode untuk semua perintah”. Di sana ada satu
kelompok perintah bernama “Move Immediate” di mana ada perintah “3E MVI A, D8”. Itu berarti
bahwa 3Eh merupakan opcode untuk perintah MVI A dan D8 berarti 8 Bit konstanta masih juga perlu
sebagai opcode dari perintah itu. Maka opcode untuk perintah MVI A,3 menjadi dua Byte: 3E dan 03.
Sekarang kita mengisi tempat untuk opcode di program kita:

2100 3E 03 Start: MVI A,3 Variable := 3

• Langkah berikutnya adalah mengisi alamat pada perintah berikutnya. Alamat sekarang menjadi 2102h
karena ditambahkan dua byte opcode dari perintah pertama ke alamat awal 2100h.

2100 3E 03 Start: MVI A,3 Variable := 3


2102 Ulang: DCR A Variable dikurangi dgn. 1

• Sekarang kita harus lagi mencari perintah baru, yaitu “DCR A” pada lembar “opcode-opcode untuk
semua perintah”. Di situ kita dapat opcode 3D di kelompok perintah “Decrement”. Ini perintah tanpa
parameter lagi selain A, maka perintah ini hanya memiliki satu Byte Opcode. Sekarang kita mengisi
tempat untuk opcode di program kita:

2100 3E 03 Start: MVI A,3 Variable := 3


2102 3D Ulang: DCR A Variable dikurangi dgn. 1
• Langkah berikutnya adalah mengisi alamat pada perintah berikutnya (“JNZ Ulang”), sekarang alamat
menjadi 2103h karena ditambahkan satu byte opcode dari perintah terakhir pada alamat 2102h.

2100 3E 03 Start: MVI A,3 Variable := 3


2102 3D Ulang: DCR A Variable dikurangi dgn. 1
2103 JNZ Ulang Kalau A < > 0 bercabang ke UL

• Sekarang kita harus mencari opcode untuk JNZ. Kita mencarinya pada lembar “opcode-opcode untuk
semua perintah” pada kelompok perintah “Jump”. Di sana tertulis: “C2 JNZ Adr”. Itu berarti opcode
untuk JNZ adalah C2h dan diperlukan Adr (yaitu Address=alamat) 2 Byte lagi untuk alamat Jump!
Alamat kita adalah label “Ulang”. Label “Ulang” merupakan alamat 2102. Maka 02 adalah Low Byte
yang harus disimpan pada Low Address (2104h) dan 21 adalah High Byte yang harus disimpan pada
High Address (2105h). Jadi seluruh opcode untuk perintah “JNZ Ulang” adalah C2 02 21, yaitu 3 Byte

Hans-Jurgen Belling & Gogor C. Setyawan


Opcode! Pada Assembler Intel 8080/8085 maksimum jumlah Byte untuk satu perintah adalah 3 Byte! 3
Byte opcode ini kita masukkan ke dalam daftar program kita.

2100 3E 03 Start: MVI A,3 Variable := 3


2102 3D Ulang: DCR A Variable dikurangi dgn. 1
2103 C2 02 21 JNZ Ulang Kalau A < > 0 bercabang ke UL

• Langkah berikutnya adalah mengisi alamat pada perintah berikutnya (“HLT”), alamat sekarang menjadi
2106h karena ditambahkan tiga byte opcode dari perintah terakhir pada alamat 2103.

2100 3E 03 Start: MVI A,3 Variable := 3


2102 3D Ulang: DCR A Variable dikurangi dgn. 1
2103 C2 02 21 JNZ Ulang Kalau A < > 0 bercabang ke UL
2106 HLT Berhenti!

• Tinggal kita mencari opcode untuk perintah “HLT”. Ini bisa ditemukan di kelompok perintah
“Control”dan mempunyai opcode 76h. Maka kita mengisi opcode dari perintah terakhir dari program
yang telah kita buat pada tempat yang disiapkan untuk Byte-Byte opcode sebelumnya.

2100 3E 03 Start: MVI A,3 Variable := 3


2102 3D Ulang: DCR A Variable dikurangi dgn. 1
2103 C2 02 21 JNZ Ulang Kalau A < > 0 bercabang ke UL
2106 76 HLT Berhenti!

Jadi sekarang program kita sudah diassemblerkan. Tinggal langkah-langkah praktis, yaitu bagaimana
...
• menyimpan Byte-Byte program dan data dalam memori dari LS Z80 / mengedit isi memori.
• menjalankan satu program (single step, run, set/clear breakpoint).
• memeriksa dan mengubah isi register-register.

1. Menghidupkan LS Z80
1. Buka kotak untuk LS Z80. Keluarkan board LS Z80 dari plastik. Simpan plastiknya baik-baik, sebab
setelah memakainya kita akan memasukkan kembali ke dalam plastik.
2. Keluarkan adaptor power-supply dari kotaknya. Pasangkan ke dalam stopkontakt yang ada di atas meja.
Kemudian steker dari kabel adaptor power supply kita masukkan ke jack untuk power supply pada
board LS Z80, yang terletak di sebelah kanan LED-7-segment display. Ada dua jack yang sama lagi di
kiri dari display, tetapi bukan untuk power supply, melainkan untuk load/save dari tape.

Display (6 angka 7-segment)

Jack untuk power supply


Exp.board
Keyboard

2. Memasukkan Data/Opcode dalam User-Memori dan mengeditnya


2.1. Tombol <RESET>
• Tekan tombol <RESET>. Maka display akan menunjukkan “READY”. <RESET> meset PC (Program
Counter) ke 2100h dan SP (Stack Pointer) ke alamat 2100h (Stack bertumbuh ke bawah sampai 0000h).

2.2. Tombol <MEM> - Memory Mode (Mengubah Alamat Memori)

Hans-Jurgen Belling & Gogor C. Setyawan


• Tekan tombol <MEM>. Fungsi tombol ini: Mengubahkan alamat. Setelah menekan tombol ini pada
display akan menunjukkan empat angka yang sedang aktif yang menunjukkan alamat, dan dua angka di
sebelah kanan alamat yang menunjukkan data.
• Tekan tombol-tombol berikut:

Tombol Display Penjelasan


RESET R E A D Y Sistem direset, siap (ready) untuk dipakai
MEM 2.1.0.0. X X Alamat awal sesudah reset: 2100. XX=sembarang

• Fungsi dari 6 angka 7-segment-Display dalam modus untuk memori:

2 1 0 0 X X
Alamat Data

• Sekarang cobalah untuk memasukkan alamat yang baru, yaitu 2234. Tekan tombol-tombol berikut:

Tombol Display Penjelasan


MEM X.X.X.X. X X Alamat sembarang (XXXX), datanya juga (XX)
2 X.X.X.2. X X “2” dimasukkan dan menggeser angka-angka lain
2 X.X.2.2. X X “2” dimasukkan dan menggeser angka-angka lain
3 X.2.2.3. X X “3” dimasukkan dan menggeser angka-angka lain
4 2.2.3.4. X X “4” dimasukkan dan menggeser angka-angka lain
Pada setiap alamat yang baru disetel selalu ada dua angka di sebelah kanan yang menunjukkan isi sel
memori pada alamat itu. X berarti angka yang sedang tidak diperhitungkan.

• Setellah alamat-alamat berikut untuk latihan dan catatlah isi memori yang ditunjuk pada kedua angka.
Tulislah pada tabel di sebelah kanan.

Alamat Isi
098D
0525
0818

2.3. Tombol <ENT> - Entry Mode (Masukkan Data)

• Dalam modus untuk mengisi memori, kita sekarang bisa mengubah data pada alamat yang sedang aktif.
Alamat yang sedang aktif adalah alamat yang ditunjukkan di keempat angka 7-segment display.

• Contoh: Kita akan mengubah data pada alamat 2234 menjadi 5A. Apabila alamat 2234 belum disetel
Anda harus menyetelnya dulu dengan perintah/tombol <MEM> seperti dijelaskan pada nomor 2.2. .
Kalau alamatnya sudah 2234 tekan tombol-tombol berikut:

Tombol Display Penjelasan


ENT 2 2 3 4 X.X. Diaktifkan “Entry-Mode” (titik-titik di kanan)
5 2 2 3 4 X.5. masukkan 5
A 2 2 3 4 5.A. masukkan A; 5A sudah disimpan pada alamat 2234

• Sekarang kita mencoba prinsip indikator aktif, yaitu titik-titik. Kalau titik-titik nyala pada sisi display
alamat, maka kita bisa mengubahkan alamat (memory-mode), kalau titik-titik nyala pada sisi display

Hans-Jurgen Belling & Gogor C. Setyawan


data, maka kita bisa mengubahkan data (entry-mode). Sekarang coba untuk menekan tombol <MEM>
dan <ENT> seperti langkah-langkah berikut dan isi titik-titik di sisi di mana titik-titik ditunjukan:

Tombol Isi titik-titiknya!??


MEM X X X X X X
ENT X X X X X X

2.4. Tombol <+> Plus (Menaikkan Alamat)

• Selain menaikkan alamat untuk memori ada juga beberapa fungsi lain dari tombol <+>. Fungsi-fungsi
tersebut nanti dijelaskan menurut konteksnya masing-masing.

• Contoh: Kita akan menyimpan data 7E pada lokasi/alamat memori 2235. Kalau alamat yang sedang aktif
2234, maka kita harus mengubah/menaikkan pada lokasi/alamat memori berikutnya, yaitu 2235 dan
kemudian menyimpan data 7E pada lokasi tersebut. Tekanlah tombol-tombol seperti berikut:

Tombol Display Penjelasan


+ 2 2 3 4 X.X. Naik satu alamat sehingga sekarang di 2235
7E 2 2 3 5 7.E. masukkan 7E

2.5. Tombol <-> - Minus (Menurunkan Alamat)

• Selain menurunkan alamat untuk memori ada juga beberapa fungsi lain dari tombol <->. Fungsi-fungsi
tersebut nanti dijelaskan menurut konteksnya masing-masing.

• Contoh: Kita mengubah isi dari lokasi/alamat memori 2234 menjadi 10. Bila alamat yang sedang aktif
2235, maka kita harus mengubah/menurunkan lokasi memori agar menjadi lokasi memori sebelumnya,
yaitu 2234 dan kemudian menyimpan data 10. Tekanlah tombol-tombol seperti berikut:

Tombol Display Penjelasan


- 2 2 3 5 5.A. Turunkan satu alamat sehingga sekarang di 2234
10 2 2 3 4 1.0. masukkan 10

2.6. Tombol <INS> - Insert

• Perintah/tombol <INS> akan memasukkan satu byte kosong (00) ke alamat yang sedang aktif. Semua
data mulai dari alamat aktif akan digeser ke satu lokasi yang lebih tinggi. Sesudah <INS> kita bisa
memasukkan data baru. <INS> berfungsi dalam “memory mode” atau “entry mode”.

• Contoh: Kita akan meng-insert-kan data 22 pada lokasi/alamat memori 2235. Jadi sekarang memori
harus diset ke alamat 2235 dulu, kemudian kita menekan <INS> dan memasukkan 22. Tekanlah tombol-
tombol seperti berikut:

Tombol Display Penjelasan


MEM 2235 2.2.3.5. 7 E Setel alamat aktif menjadi 2235
INS 2 2 3 5 0.0. Isi Byte yang kosong
22 2 2 3 5 2.2. Simpan 22 pada lokasi/alamat memori 2235

Isi memori sebelum dan sesudah insert menjadi seperti ditunjukkan di bawah:

Hans-Jurgen Belling & Gogor C. Setyawan


Sebelum <INS> Sesudah <INS>
2 2 3 4 1.0. 2 2 3 4 1.0.
2 2 3 5 7.E. 2 2 3 5 2.2.
2 2 3 6 7.E.

2.7. Tombol <DEL> - Delete

• Perintah/tombol ini akan menghapus isi dari lokasi/alamat yang sedang aktif. Semua data yang disimpan
pada alamat-alamat yang lebih tinggi daripada alamat yang sedang aktif akan digeser satu posisi yang
lebih rendah. Perintah/tombol <DEL> berfungsi dalam “memory-mode” dan “entry-mode”.

• Contoh: Kita menghapus isi dari lokasi memori 2235. Jadi kita menyetel lokasi/alamat yang sedang aktif
menjadi 2235 dan kemudian kita menekan <DEL>. Tekanlah tombol-tombol seperti berikut:

Tombol Display Penjelasan


MEM 2235 2.2.3.5. 2 2 Setel alamat aktif menjadi 2235
DEL 2 2 3 5 7.E. Isi 22 dihapus

Isi memori sebelum dan sesudah Delete ditunjukkan seperti tabel di bawah:

Sebelum <INS> Sesudah <INS>


2 2 3 4 1.0. 2 2 3 4 1.0.
2 2 3 5 2.2. 2 2 3 5 7.E.
2 2 3 6 7.E.

• Sekarang masukkan program contoh dari pengantar. Mulai dari alamat 2100, simpan Byte-Byte berikut:
3E, 03, 3D, C2, 02, 21, 76. Jadi Byte terakhir, yaitu 76 harus disimpan pada alamat 2106. Dengan
demikian kita sudah memasukkan satu program ke dalam memori yang bisa kita jalankan.

3. Menjalankan satu program


3.1. Tombol <STEP> (Mengerjakan Satu Perintah)
• Tombol <STEP> berfungsi untuk menjalankan satu perintah mesin setiap kali ditekan tombol <STEP>.

• Program Monitor dari LS Z80 aktif lagi sesudah perintah itu dikerjakan, dan dengan demikian kita bisa
memeriksa seluruh pengaruh terhadap memori/register/flag-flag oleh perintah yang baru selesai
dijalankan. Jadi satu program bisa dijalankan secara perintah demi perintah serta bisa diperiksa pengaruh
setiap perintahnya.

• Setiap kali sesudah dijalankan satu <STEP> maka alamat dari perintah berikutnya ditunjukkan serta isi
dari alamat itu.

• Contoh: Kita menjalankan perintah pertama dari program yang ada pada nomor 2.7 yang sudah kita
simpan, yaitu “MVI A,03”. Perintah “MVI A,03” terdiri atas dua Byte, yaitu 3E (pada alamat 2100)
dan 03 (pada alamat 2101). Maka kita harus mengaktifkan alamat/lokasi memori dari Byte pertama dari
perintah “MVI A,03”, yaitu 2100. Sesudah kita menjalankan/me-STEP-kan perintah “MVI A,03”, maka
alamat dari perintah baru yang ditunjukkan harus 2102. Tekanlah tombol-tombol seperti berikut:

Tombol Display Penjelasan


MEM 2100 2.1.0.0. 3 E Setel alamat aktif menjadi 2100
STEP 2 1 0 2 3.d. Perintah “MVI A,03” sudah dikerjakan. Perintah baru mulai
pada alamat 2102.

Hans-Jurgen Belling & Gogor C. Setyawan


• Sekarang setel alamat aktif lagi menjadi 2100. Kemudian hitung berapa kali tombol <STEP> harus
ditekan sampai program berakhir (alamat 2106 sudah tercapai): kali <STEP>.

3.2. Tombol <RUN> (Menjalankan Satu Program)


• Tombol <RUN> berfungsi untuk menjalankan satu program yang mulai dari alamat yang sedang aktif.

• Contoh: Kita menjalankan program yang ada pada nomor 2.7 yang sudah tersimpan. Untuk itu kita
harus menyetel alamat 2100 aktif dulu dan kemudian tekan tombol <RUN>. Kerjakan dua langkah itu.
Apa yang ditunjukkan pada display sesudah dijalankan <RUN>?

3.3. Tombol <EXIT> (Keluar Dari Program)


• Tombol <EXIT> berfungsi untuk menghentikan satu program dan menunjukkan alamat di mana
program kita dihentikan. Tombol ini berguna apabila pada sistem kita terjadi “hang”. Dengan tombol
<EXIT> kita dapat mengetahui pada alamat berapa sistem kita “hang”. (Setelah menekan tombol
<EXIT>, alamat yang ditunjukkan pada display adalah alamat perintah berikutnya dari perintah yang
sedang dikerjakan).

• Contoh: Sesudah program kita di-run (pada nomor 3.2.) tekan tombol <EXIT>. Maka monitor akan aktif
dan menunjukkan alamat sesudah perintah terakhir dari program kita, yaitu alamat 2107. Pada alamat
2106 ada perintah HLT yang menginaktifkan prosesor. Jadi tekan tombol-tombol berikutnya:

Tombol Display Penjelasan


MEM 2100 2.1.0.0. 3 E Setel alamat aktif menjadi 2100.
RUN Program kita dikerjakan sampai HLT, maka display mati.
EXIT 2.1.0.7. X X Alamat sesudah perintah HLT ditunjukkan.
• Sekarang kita mencoba untuk menjalankan program pada nomor 2.7. yang sudah tersimpan dan
menghentinya dengan tombol RESET. A) Apakah sekarang Byte-Byte program yang sudah disimpan
hilang (periksa isi memori dari 2100 sampai 2106)? . B) Apakah kita bisa mengetahui
program kita “hang” pada alamat berapa, kalau kita menghentikan program dengan RESET?
_______________________.

3.4. Tombol <SBP> - Set Breakpoint


• Sering kita ingin tahu apa yang dikerjakan pada satu perintah/lokasi program tertentu. Tetapi kalau kita
selalu hanya STEP (Single Step) terus, maka terlalu sering harus kita tekan tombol STEP sampai kepada
perintah yang ingin kita amati.

• Kalau program kita dijalankan dengan <RUN> maka program itu tidak akan berhenti sendiri pada lokasi
di mana kita ingin memeriksa sistem kita. Sebab itu ada “Breakpoint”, yaitu berarti “titik/lokasi
berhenti”. Dengan <SBP> kita bisa menandai satu lokasi program, yaitu alamat, di mana perjalanan
program kita akan berhenti.

• Maksimal enam Breakpoint bisa di-set. Tanda bahwa ada Breakpoint pada satu alamat adalah bahwa
titik-titik pada semua angka menyala.

• Contoh: Misalnya kita ingin melihat kondisi register A (Accu) setiap kali sebelum A dikurangi dengan
satu (dengan perintah “DCR A”). Sebab itu kita harus me-set satu “Breakpoint” pada alamat untuk
perintah “DCR A”. Maka program kita akan berhenti sebelum perintah ini dijalankan. Jadi kita harus
mengaktifkan alamat dari perintah “DCR A”, yaitu 2102 dan kemudian menekan <SBP>. Sesudah itu
program bisa dijalankan dari awal 2100 dengan <RUN>, tetapi akan berhenti pada alamat 2102.
Kemudian kita bisa periksa, misalnya isi dari register A dan melanjutkan program kita dengan <STEP>
dan kemudian <RUN> sampai program kita mencapai lagi alamat Breakpoint. Jadi tekan tombol-tombol
berikutnya:

Hans-Jurgen Belling & Gogor C. Setyawan


Tombol Display Penjelasan
MEM 2102 2.1.0.2. 3 D Setel alamat aktif menjadi 2102 agar bisa ditandai.
SBP 2.1.0.2. 3.D. Breakpoint sudah diset maka semua titik menyala!
MEM 2100 2.1.0.0. 3 E Setel alamat aktif menjadi 2100 agar program dimulai.
RUN 2.1.0.2. 3.D. Sesudah RUN program berjalan sampai ke breakpoint.
STEP 2.1.0.3. C 2 Jalankan perintah “DCR A”.
RUN 2.1.0.2. 3.D. Program berjalan lagi sampai ke breakpoint.

3.5. Tombol <CBP> - Clear Breakpoint


• Tombol <CBP> berfungsi untuk menghapus “Breakpoint” yang sudah diset. Setelah menekan tombol
<CBP>, titik-titik pada semua angka display yang nyala akan hilang

• Contoh: Kita menghapus “Breakpoint” yang tadi di-set pada nomor 3.4.. Untuk itu kita harus menjadikan
alamat 2102 sebagai alamat yang sedang aktif dan kemudian tekan tombol <CBP>.

Tombol Display Penjelasan


MEM 2102 2.1.0.2. 3.D. Breakpoint pada alamat 2102 masih di-set!
CBP C l r b P Ditunjukkan pesan: Clear Breakpoint
ENT 2 1 0 2 3.D. Titik-titik alamat hilang maka “Breakpoint” dihapus.

4. Memeriksa dan Mengubah Isi Register-Register


4.1. Tombol <BC> (Memeriksa dan Mengubahkan Isi Register B dan C)
• Dengan Tombol <BC> kita bisa memeriksa dan mengubah isi dari register B dan C.

• Contoh: Kita memeriksa isi dari register C dan mengubahnya menjadi 47. Tekan tombol-tombol berikut:

Tombol Display Penjelasan


BC X.X.X X B.C Menunjukkan isi register B dan C. Titik-titik ada pada B
dan pada data untuk register B
+ X X X.X. B C. Titik-titik berpindah kepada C dan kepada isi dari register
C. Maka sekarang bisa diubahkan isi dari register C.
47 X X 4.7. B C. Ubahkan isi register C menjadi 47

Contoh: Kita sekarang mengubah isi dari register B sehingga menjadi 5A. Tekan tombol-tombol berikut:

Tombol Display Penjelasan


- X.X.4 7 B.C Titik-titik berpindah lagi kepada B dan kepada data untuk
register B. Sekarang data untuk B bisa diubahkan.
5A 5.A.4 7 B.C Isi dari register B diubah menjadi 5A.

4.2. Tombol <DE> (Memeriksa dan Mengubahkan Isi Register D dan E)


• Dengan Tombol <DE> kita bisa memeriksa dan mengubah isi dari register D dan E. Caranya mengubah
dan memeriksanya sama dengan cara pada tombol <BC>. Hanya display menjadi:

X.X.X X D.E

Hans-Jurgen Belling & Gogor C. Setyawan


• Coba untuk membaca isi dari register D dan E. Maka tombol apa yang harus ditekan? .
• D dan E berisi berapa? D= . E= .
• Sekarang ubahkan isi register E menjadi 34. Tombol-tombol apa yang harus ditekan?
.
• Sekarang ubahkan isi register D menjadi 12. Tombol-tombol apa yang harus ditekan?
.

4.3. Tombol <HL> (Memeriksa dan Mengubahkan Isi Register H dan L)


• Dengan Tombol <HL> kita bisa memeriksa dan mengubah isi dari register H dan L. Caranya mengubah
dan memeriksanya sama dengan cara pada tombol <BC>. Hanya display menjadi:

X.X.X X H.L
4.4. Tombol <AF> (Memeriksa dan Mengubahkan Isi Accumulator A dan Register Flag F)
• Dengan Tombol <AF> kita bisa memeriksa dan mengubah isi dari register Accumuator A dan register
Flag F. Caranya mengubah dan memeriksanya sama dengan cara pada tombol <BC>. Hanya display
menjadi:
X.X.X X A.F

Organisasi dari register Flag adalah sebagai berikut:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Sign-Flag Zero-Flag tidak Half- tidak Parity tidak Carry-
dipakai Carry- dipakai Flag dipakai Flag
Flag

Maka untuk mengetahui apakah suatu Zero-Flag diset atau tidak, kita harus mengubah nilai heksadesimal
(yang bisa kita baca) untuk isi register F menjadi dual. Misalnya F=66h berarti F= 0110 0110. Maka
bit6=“1”, jadi Zero-Flag=“1”. Atau kalau kita membaca F= 3Dh berarti F= 0011 1101. Maka bit6=“0”,
jadi Zero-Flag=“0”.

• Contoh: Kita menjalankan program yang ada pada nomor 2.7. yang sudah tersimpan dan dengan
memakai Breakpoint sebelum perintah “JNZ Ulang” (disimpan: 2103: C2 02 21) dan memeriksa isi dari
Accu serta memeriksa kondisi Zero-Flag. Dari kondisi Zero-Flag kita bisa mengetahui apakah perintah
“JNZ Ulang” akan bercabang lagi ke label Ulang atau program akan masuk ke perintah “HLT” untuk
berakhir. Kalau Zero-Flag masih “0” maka “JNZ Ulang” (JNZ = Jump if not Zero) akan bercabang.
Tekan tombol-tombol berikut dan isi kondisi-kondisi apa yang Anda baca untuk A dan Zero-Flag:

Hans-Jurgen Belling & Gogor C. Setyawan


Counter 3..0

Variable = 3
MVI A,3

Ulang

Variable dikurangi
dengan 1; DCR A

Tidak

Variable = 0 ?
JNZ Ulang

Ya

END
HLT

Tombol Display Penjelasan


MEM 2103 2.1.0.3. C 2 Setel alamat aktif menjadi 2103.
SBP 2.1.0.3. C.2. Set Breakpoint pada alamat 2103.
MEM 2100 2.1.0.0. 3 E Setel alamat aktif menjadi 2100.
RUN 2.1.0.3. C.2. Program berjalan sampai Breakpoint pada alamat 2103
AF X.X.X X A.F Accu berisi berapa? . Zero-Flag 1/0? .
MEM 2.1.0.3. C.2. Kembali ke “Memori Mode” / alamat yang sedang aktif.
STEP 2 1 0 2 3.D. Step satu kali sehingga tidak lagi pada lokasi Breakpoint.
RUN 2.1.0.3. C.2. Program berjalan sampai Breakpoint pada alamat 2103
AF X.X.X X A.F Accu berisi berapa? . Zero-Flag 1/0? .
MEM 2.1.0.3. C.2. Kembali ke “Memori Mode” / alamat yang sedang aktif.
STEP 2 1 0 2 3.D. Step satu kali sehingga tidak lagi pada lokasi Breakpoint.
AF X.X.X X A.F Accu berisi berapa? . Zero-Flag 1/0? .
Apakah program sekarang akan bercabang lagi ke label “Ulang”, yaitu alamat 2102? .
MEM 2.1.0.3. C.2. Kembali ke “Memori Mode” / alamat yang sedang aktif.
STEP Apa yang ditunjukkan pada display? ____ ____ ____ ____ ____ ____.

4.5. Tombol <SP> (Memeriksa dan Mengubahkan Isi Stack Pointer SP)
• Dengan Tombol <SP> kita bisa memeriksa dan mengubah isi dari register “Stack Pointer” SP.

• Contoh: Kita memeriksa isi dari SP dan mengubahnya menjadi 2655. Tekanlah tombol-tombol seperti
berikut:

Tombol Display Penjelasan


SP X.X.X.X. S.P. SP siap untuk diubah. Diindikasi dengan titik-titik.
2655 2.6.5.5. S.P. SP sekarang diubah menjadi 2655.

Hans-Jurgen Belling & Gogor C. Setyawan


 Tanda tangan dosen / asistent:
5. Program untuk Membuat Bunyi dengan LS Z80
5.1. BEEP System-Procedure (Alamat Panggilan: 079E)
• Untuk membuat satu bunyi dengan LS Z80 kita menggunakan prosedur BEEP. Prosedur BEEP ini
sudah ada dalam ROM bersama dengan program Monitor.

• Satu prosedur dipanggil dengan perintah Assembler CALL.

• Prosedur BEEP memiliki dua parameter: Yang pertama adalah parameter1 untuk menentukan
frekwensi dari bunyi itu, dan yang kedua adalah parameter2 untuk menentukan jumlah gelombang yang
akan kita keluarkan. Parameter1 harus disimpan dalam alamat/lokasi memori 2041 dan parameter2
harus disimpan pada alamat 2042.

• Untuk menentukan frekwensi dari bunyi yang akan dikeluarkan terdapat rumus sebagai berikut:

5000
Parameter1=
Frekwensi
Jadi apabila kita mau mengeluarkan satu bunyi dengan frekwensi 500Hz, maka dalam rumus harus mengisi
5000
nilai untuk frekwensi 500. Maka rumus untuk parameter1 menjadi, Parameter1 = = 10 . Sehingga
500
pada alamat 2041 (alamat untuk parameter1) kita harus menyimpan 0A (=10 desimal).

• Untuk mengeluarkan 250 gelombang maka parameter2 harus menjadi FA. Maka pada alamat 2042 kita
harus menyimpan nilai FA.

5.2. Program dalam Bahasa Assembler untuk Memanggil BEEP dengan Parameternya

• Sebelum kita bisa memanggil prosedur BEEP, terlebih dulu kita harus menyimpan parameter-parameter
yang program BEEP perlukan. Untuk menyimpan satu konstanta ke memori kita perlu dua perintah.
Pertama kita “load” konstanta ke register A, dan kemudian kita menyimpan isi dari A ke lokasi memori.

• Perintah untuk me-“load” satu konstanta (misalnya 0A untuk parameter1=> frekwensi = 500Hz) ke
dalam register A adalah “MVI A,0A”.

• Perintah untuk menyimpan isi dari register A ke memori pada alamat 2041 adalah “STA 2041”, yaitu
berarti “Store Accu at Address 2041”.

• Untuk menyimpan konstanta FA ke alamat 2042 untuk parameter2 (untuk mengeluarkan 250
gelombang) kita harus memakai dua langkah yang sama seperti untuk parameter1. Pertama kita
menyimpan konstanta FA ke dalam register A dengan perintah “MVI A,FA”. Kemudian kita
menyimpan isi dari register A ke memori pada alamat 2042 dengan perintah “STA 2042”.
• Sesudah itu kita bisa memanggil prosedur BEEP dengan perintah CALL. Maka perintah kita menjadi
“CALL 079E”.

• Terakhir kita menghentikan prosesor dengan perintah “HLT”.

5.3. Mengisi Tabel Opcode dan Menjalankan Program

Hans-Jurgen Belling & Gogor C. Setyawan


• Berikutnya ditulis program untuk satu kali menjalankan bunyi 500 Hz dengan 250 gelombang. Carilah
opcode-opcode yang harus diisi dalam daftar berikut. Perhatikan peraturan untuk alamat-alamat pada
perintah STA <alamat> dan CALL <alamat>: Dari dua Byte (16 Bit) alamat yang menjadi parameter
pada perintah STA dan CALL harus disimpan secara Lower Byte ke Lower alamat, dan Higher Byte ke
Higher alamat. Maka seperti sudah diisi pada perintah STA 2041 parameter alamat 2041 disimpan secara
Low Bytenya (41) dulu, baru Higher Bytenya (20). Isikan seluruh daftar berikut (termasuk alamat)
dengan opcode-opcode dari setiap perintah. Anda bisa mencarinya di lembar dengan opcode-opcode dari
setiap perintah 8080 (Z80).

Alamat O1 O2 O3 Label Perintah Operand... Komentar

2100 START: MVI A,0A A  parameter1 (500Hz)


41 00 STA 2041 parameter 1 yang disimpan di A
akan disimpan pada alamat 2041
MVI A,FA A parameter2(250 gelombang)
STA 2042 Isi A disimpan pada alamat 2042
CALL 079E Panggil prosedur BEEP.
HLT Berhenti!

• Jalankan program ini dengan <RESET>, <MEM>, <RUN>. Ubahkan parameter1 dengan nilai-nilai
04,07, 0D dan 12. Maka Byte di program pada alamat berapa harus diganti?
Buatlah loop ke alamat 2100 kembali dengan menggantikan perintah “HLT” dengan “JMP START”.
 Tanda tangan dosen / asistent:
5. Soal-Soal yang harus dikerjakan dulu sebelum bisa masuk Praktikum ini
1. Jelaskan langkah-langkah untuk membuat satu program dengan LS Z80. Mulai dari problem yang mau
dikerjakan dengan LS Z80 sampai menjalankan programnya !
2. Jelaskan mengapa ada perintah-perintah dengan 1, 2 dan 3 Byte opcode. Berikan contoh untuk setiap
macam jumlah opcode.
3. Contoh: Mulai pada alamat 2300h harus disimpan JMP LOOP. LOOP adalah label untuk alamat 2340.
Maka ketiga Byte opcode dari alamat 2300, 2301 dan 2302 menjadi berapa? Jelaskan secara rinci
bagaimana peraturan “High Byte ke High Address dan Low Byte ke Low Address” diaplikasikan untuk
urutan menyimpan parameter alamat label LOOP.
4. Kalau untuk kondisi register F dibaca 3E, maka Sign-Flag, Zero-Flag dan Carry-Flag masing-masing
dalam kondisi apa? Bagaimana kalau register F = 97?

Hans-Jurgen Belling & Gogor C. Setyawan

Anda mungkin juga menyukai