PEMINDAHAN DATA
Disusun oleh :
B. TEORI
1. Kebanyakan operasi pemindahan data didapat dengan menggunakan instruksi LD (Load).
Data dapat dipindahkan dalam unit-unit 8 bit atau 16 bit. Instruksi-instruksi seperti EX,
EXX, PUSH dan POP juga dapat digunakan untuk memindahkan data 16 bit. Sedangkan
instruksi LDI dan LDIR dapat dipakai untuk memindahkan blok-blok data.
2. Suatu instruksi LD mencakup 2 operand. Operand pertama menunjukkan lokasi dimana
data akan disimpan ( dibagian memori atau register). Operand ini disebut tujuan.
Operand kedua menunjukkan lokasi asal data yang dipindahkan dan disebut sumber.
Misalnya LD A,B menunjukkan bahwa data pada register B akan dipindahkan
(dicopykan) ke register A. Register A disebut tujuan dan register B disebut sumber.
3. Kemungkinan arah perpindahan data :
a) Register ke register, misal LD A,B ; LD HL, BC
b) Memori ke register, misal LD A, (HL) ; POP AF
c) Data ke register, misal LD A, 25H ; LD HL, 125AH
d) Register ke memori, misal LD (HL), A ; PUSH BC
e) Memori ke memori, missal LDD ; LDIR
f) Data ke memori, misal LD (HL), 5BH.
C. LANGKAH DAN DATA PERCOBAAN
1. PERCOBAAN I
Tulislah program dalam bahasa rakitan untuk mengeset isi register-register sebagai berikut :
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 1820 1821H dengan cara
sebagai berikut :
Contoh program:
Menulis program untuk menghapus isi memori alamat 1850H sampai 186FH.
Alamat Bahasa Mesin Label Bahasa Rakitan Keterangan
memori
1800H 06 20 LD B, 20H Data 20H sebagai penghitung loop
1802H 21 50 18 LD HL, 1850H Set HL sbg alamat awal memori yg diisi nol
1805H AF XOR A Set re A = 0
1806H 77 Loop LD (HL), A Isikan 0 pada alamat memori yg ditunjuk HL
1807H 23 INC HL Tambah HL dengan 1
1808H 05 DEC B Kurangi B dengan 1
1809H 20 FB JR NZ, Loop Jika isi reg B belum = 0 kembali ke Loop
FF RST 38H Kembali ke program monitor
Penjelasan :
1. Jika digunakan instruksi LD 8 bit untuk memindahkan setiap data ke tujuan
masing-masing akan diperlukan 32 (20H) kali pelaksanaan pemindahan data.
Akan lebih mudah jika digunakan metode loop pada program.
2. Gunakan register B sebagai penghitung loop. Set reg B sama dengan 20H
sebelum pelaksanaan program loop. Gunakan HL sebagai penunjuk alamat
memori dan set alamat awal 1850H pada HL. HL ditambah dengan 1 (increment)
untuk setiap loop. Jika B=0, berati semua loop telah dilaksanakan, jika
sebaliknya loop diulangi lagi.
4. PERCOBAAN IV
Tulisah suatu program dalam bahasa rakitan untuk mengeset alamat memori 1840H sampai
184F sebagai berikut : 0. 1. 2. 3. , . . . . . , F. Petunjuk : Ubahlah penghitung loop dan nilai
alamat awalnya. Register A ditambah dengan 1 pada loop berikutnya.
Untuk memindahkan data dari Alamat memory ke registry digunakan Perintah LD.
Bahasa mesin perintah LD terdiri dari 4 bit data.
2 bit pertama berisi perintah Isi registry mana yang akan diubah dengan secara urut
3E, 06, 0E, 16, 1E, 26, dan 2E merupakan perintah untuk mengisi registry A, B, C,
D, E, H, dan L.
2 bit berikutnya berisi data yang akan diisikan ke registry tersebut, nilai registry yang
diisikan dapat diisi dengan data apa saja tergantung keinginan, mulai dari 00H
sampai FFH.
b) Percobaan 2
Alamatmemori Bhs Mesin BahasaRakitan Keterangan
1820H 01 34 12 LDBC, 1234H Isi Reg BC dgn data 1234H
1823H 11 78 56 LD DE, 5678H Isi Reg DE dgn data 5678H
1826H 21 0A 09 LD HL, 090AH Isi Reg HLdgn data 090AH
FF RST 38H
Hampir sama dengan percobaan satu, hanya saja perintah ini mengisikan 2 registry
sekaligus
Perintah bahasa mesin terdiri dari 6 bit data
2 bit pertama menyatakan registry yang akan diisi dengan secara berurutan 01, 11,
dan 21 menyatakan perintah untuk mengisi registry BC, DE, dan HL
2 bit selanjutnya menyatakan data yang akan diisikan ke registry ke dua dari
pasangan registry yang akan diisi, contohnya jika dimasukkan 01 34 12 maka 34H
akan mengisi data registry C dari registry BC
2 bit terakhir menyatakan data yang akan diisikan ke registry pertama dari pasangan
registry yang akan diisi, contohnya jika dimasukkan 01 34 12 maka 12H akan
mengisi data registry B dari registry BC
c) Percobaan 3
Menulis program untuk menghapus isi memori alamat 1850H sampai 186FH.
Alamat BahasaMesin Label BahasaRakitan Keterangan
memori
1800H 0620 LDB,20H Data20Hsebagaipenghitungloop
1802H 215018 LDHL,1850H SetHLsbgalamatawalmemoriygdiisinol
1805H AF XORA SetreA= 0
1806H 77 Loop LD(HL),A Isikan0 padaalamatmemoriygditunjukHL
1807H 23 INCHL TambahHLdengan1
1808H 05 DECB KurangiB dengan1
1809H 20FB JRNZ, Loop JikaisiregBbelum= 0 kembalikeLoop
FF RST38H Kembalikeprogrammonitor
Pada alamat 1800H dan 1801H bahasa mesin 06 20 ini menyatakan jumlah data yang
akan diubah, 20 menunjukkan jumlah address yang akan diubah dan data ini
disimpan pada registry B. Jadi untuk mengubah jumlah datanya tinggal mengganti
data alamat 1801H.
Alamat 1802H 1804H merupakan letak address alamat awal yang akan diubah
datanya, dengan 21 50 18 empat bit terakhirnya merupakan alamat address dengan
letak dua digitnya terbalik yang akann diisikan ke registry HL.
Address 1805H merupakan data yang akan diisikan ke address yang akan diubah,
perintah ini juga dapat diganti dengan LD A, N untuk mengubah data selain nol.
Address 1806H merupakan perintah untuk mengisikan data registry A yang sudah di
set pada perintah sebelumnya ke Address yang akan dituju.
Address 1807H merupakan perintah untuk menaikkan nilai registry HL yang
berisikan alamat yang dituju sebanyak 1 bit.
Address 1808H merupakan perintah untuk mengurangi nilai registry B yang
berisikan jumlah data yang diisi sebnyak 1 bit.
Address 1809H 180AH merupakan perintah Loop dimana Loop akan berhenti jika
nilai registry B sama dengan 0. Titik awal Loop dapat diganti dengan mengubah nilai
bit terakhir perintah tersebut.
d) Percobaan 4
e) Latihan Soal
Alamat Bahasa Label BahasaRakitan Keterangan
memori Mesin
1800H 06 16 LD B, 16H Data 16H sebagaipenghitung Loop
1802H 21 40 18 LD HL, 1950H Set HL sebagaialamatawalmemori yang diisinol
1805H AF XOR A Set Reg A=0
1806H 77 LOOP LD (HL), A Isikan 0 pdaalamatmemori yang di tunjuk HL
1807H C6 ADDA, N Mengisi registry A sebanyak +2
1808H 02 ADD A -
1809H 23 INC HL Tambah HL dengan 1
180AH 05 DEC B Kurangi B dengan 1
180BH 20 F9 JRNZ, LOOP Jikaisi Reg belum=0 kembalike Loop
180DH FF FF RST 38HRST 38H
E. Kesimpulan
Dari percobaan ini dapat disimpulkan bahwa Praktikan sudah terbiasa memakai fungsi
instruksi pemindahan data dan sudah dapat mengeset nilai inisialisasi data. Selain itu
Praktikan juga sudah dapat menulis Program untuk mengganti nilai-nilai data Alamat dengan
rentang tertentu dengan memanfaatkan Perintah untuk memindah data registry pada
Mikroprossesor.