PERTEMUAN 2
TRANSFER DATA
Alat dan Bahan
Microprocessor evaluator (Zilog Z80)
Tujuan
- Membiasakan pemakai dengan fungsi tranfer data
- Latihan menggeser nilai inisialisasi data
- Latihan menulis program, mengisi dan menjalankan
Dasar Teori
Kebanyakan operasi transfer data didapat dengan menggunakan instruksi LD(load). Data dapat ditransfer dalam unit-unit 8 bit atau 16 bit. Instruksi-instruksi seperti EX, EXX, PUSH dan POP juga dapat digunakan untuk mentransfer data 16 bit. Sedangkan instruksi LDI dan LDIR dapat dipakai untuk mentrasfer blok-blok data.
Suatu instruksi LD mencakup 2 operand. Operand pertama menunjukkan lokasi destination atau tujuan dan operand kedua menunjukkan source atau sumber.
kemungkinan transfer data yang terjadi :
register ß register contoh LD A,B
register ß memory contoh LD A,(HL)
register ß data contoh LD A,25h
memori ß register contoh LD (HL),A
memori ß memory contoh LDD
memori ß data contoh LD (HL),5Bh
Percobaan – Percobaan
Tulislah program dalam bahasa assembly untuk mengeset isi register-register sebagai berikut A = 00h, B = 01h, C = 02h, D = 03h, E = 04h, H = 05h, L = 06h (gunakan instruksi LD 8 bit untuk mentransfer satu byte di masing-masing register).
Langkah 1 : tulislah program dalam bahasa assembly. Instruksi terakhir RST38h akan mengembalikan kontrol uPro-1 pada program monitor setelah menjalankan seluruh program.
Langkah 2 : Dengan menggunakan tabel instruksi LD 8 bit, terjemahkan program kedalam bahasa mesin dengan 1800h sebagai alamat awal. Tuliskan alamat yang sesuai untuk tiap-tiap instruksi.
Langkah 3 : Siapkan mikrokomputer uPro-1 (mikroprossesor evaluator). Masukkan program dengan menekan tombol-tombol pada keypad. Periksa program yang tersimpan dalam memroy. Set PC(Program Counter) pada alamat awal, yaitu alamat 1800h. Dan jalankan programnya.
Langkah 4 : Tekan tombol REG dan periksalah apakah isi tiap-tiap register sudah benar. Bila masih ada kesalahan, kebalilah pada langkah 1 dan periksa lagi.
Address | Machine Code | Assembly |
1800h | 3E 00 | LD A,00h |
…….. | …….. | …….. |
…….. | …….. | …….. |
…….. | FF | RST 38h |
Tulislah program dimana bahasa assembly ntuk mengeset isi register-register sebagai berikut B = 12h, C = 34h, D = 56h, E = 78h, H = 9h, L = A (gunakan instruksi LD 16 bit untuk mentransfer dua byte di masing-masing register)
Langkah 1 : Sama dengan percobaan1 (tulis program dengan bahasa assembly).
Langkah 2 : Dengan menggunakan tabel instruksi LD 16 bit, terjemahkan program kedalam bahasa mesin dengan alamat awal 1820h.
Langkah 3 : (sama dengan percobaan 1) Set PC(Program Counter) pada alamat awal, yaitu alamat 1800h. Dan jalankan programnya.
Langkah 4 : Periksa isi pada masing-masing register (seperti percobaan 1).
catatan : suatu data 16 bit terdiri dari 2 byte data. Byte berorde tinggi berada pada alamat memori yang lebih tinggi, sedangkan byte berorde rendah berada pada alamat memori yang lebih rendah.Misalkan, data 16 bit 1234h disimpan pada alamat 1820h – 1821h dengan cara sebagai berikut :
Address | Machine Code | ASSEMBLY |
1820h | 01 34 12 | LD BC,1234h |
1823h | …….. | …….. |
…….. | …….. | …….. |
…….. | FF | RST 38h |
Menulis program untuk menghapus isi memori pada alamat 1850h sampai 186Fh, penjelasan :
1. Jika kita menggunakan instruksi LD 8 bit untuk mentransfer setiap data ke tujuan masing-masing, akan diperlukan 32 (20h) kali pelaksanaan transfer data. Akan lebih mdah bila kita menggunakan metoda “loop” pada program kita.
2. Gunakan register B sbagai penghitung loop. Gnakan HL sebagai pennjuk alamat memori dan set alamat awal 1850h padaHL. HL ditambah dengan satu (incremented) dan B dikurangi dengan 1 (decremented) untuk setiap loop. Jika b=0, berarti semua loop telah dilaksanakan. Jika sebaliknya (B ≠ 0), loop diulang lagi.
3. Programnya adalah sebagai berikut
Address | Machine Code | Label | Assembly |
1820h | …….. | …….. | LD B,20h |
…….. | …….. | …….. | LD HL,1850H |
…….. | …….. | …….. | XOR A |
…….. | …….. | LOOP | LD (HL),A |
…….. | …….. | …….. | INC HL |
…….. | …….. | …….. | DEC B |
…….. | …….. | …….. | JR NZ,LOOP |
…….. | FF | …….. | RST 38h |
Terjemahkan program contoh diatas kedalam bahasa mesin dan isikan ke RAM evaluator. Jalankan program danperiksa apakah isi alamat 1850h -186Fh telah terhapus (= 0). Jika belum benar, periksa sekali lagi, lalu jalankan lagi.
Tulislah suatu program dam bahasa assembly untuk mengeset alamat memori 1840h-184Fh sebagai berikut : 0, 1, 2, ….., F. (Petunjuk : ubahlah penghitung loop dan nilai alamat awalnya. Register A ditambah dengan 1 pada loop berikutnya).
No comments:
Post a Comment