• Tidak ada hasil yang ditemukan

pembagian biner mpf7

N/A
N/A
Protected

Academic year: 2017

Membagikan "pembagian biner mpf7"

Copied!
7
0
0

Teks penuh

(1)

PERCOBAAN 7

PEMBAGIAN BINER

Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY E-mail : sumarna@uny.ac.id

Tujuan dari percobaan ini agar memahami cara merancang subroutine pembagian biner untuk suatu mikrokomputer. Selain itu, agar terbiasa dengan teknik-teknik perancangan program.

Prosedur pembagian biner secara manual dan terperinci dapat dijelaskan sebagai berikut. Misalkan bagilah bilangan biner 11101101 dengan bilangan biner lain 00010100. Untuk contoh tersebut, perhatikan langkah-langkah berikut :

1. Tulislah bilangan yang akan dibagi di sebelah kanan dan bilangan pembagi di sebelah kiri. Kemudian letakkan hasilnya di atas bilangan yang dibagi.

2. Geser bilangan yang dibagi dan hasilnya (jawabannya) ke kiri 1 bit. Untuk membandingkan antara bilangan yang dibagi dengan pembagi, letakkan 7 buah 0 (nol) di belakang bilangan pembagi pada kolom di bawah bilangan yang dibagi. Dengan mudah dapat dilihat bahwa bilangan yang dibagi lebih kecil dari pada bilangan pembagi, karena itulah letakkan 0 (nol) pada kolom hasil (jawaban).

1 1 1 0 1 1 0 1

Hasil (jawaban)

Bilangan yang dibagi (237)

Bilangan pembagi (20) 0 0 0 1 0 1 0 0

1 1 1 0 1 1 0 1

0 Hasil (jawaban)

Bilangan yang dibagi

Bilangan pembagi 0 0 0 0 0 0 0

(2)

3. Lihatlah, apakah bilangan yang dibagi masih lebih kecil dari pada bilangan pembaginya. Jika ternyata bilangan yang dibagi masih lebih kecil dari pada bilangan pembagi, maka letakkan 0 (nol) pada kolom hasil (jawaban). Jika sebaliknya, maka letakkan 1 (satu) pada kolom jawaban dan bilangan yang dibagi dikurangi dengan pembaginya. Selisishnya (perbedaannya) menjadi bilangan yang dibagi. Pada contoh tersebut, bilangan yang dibagi dengan hasilnya (jawabannya) harus digeser 5 bit sebelum 1 (satu) dapat diletakkan pada jawaban. Jadi 4 buah 0 (nol) dan satu buah 1 (satu) diletakkan pada kolom jawaban dengan cara sebagai berikut :

4. Kurangi bilangan yang dibagi dengan pembagi. Perbedaannya menjadi bilangan yang dibagi.

5. Bilangan yang dibagi dan hasilnya digeser ke kiri 2 bit, kemudian 1 (satu) diletakkan pada kolom jawaban.

1 1 1 0 1 1 0 1

0 0 0 0 1 Hasil (jawaban)

Bilangan yang dibagi

Bilangan pembagi 0 0 0

0 0 0 1 0 1 0 0 0

0 1 0 0 1 1 0 1

0 0 0 0 1 Hasil (jawaban)

Bilangan yang dibagi setelah pengurangan Bilangan pembagi 0 0 0

0 0 0 1 0 1 0 0 0

0 1 0 0 1 1 0 1

0 0 0 0 1 0 1 Hasil (jawaban)

(3)

6. Kurangi bilangan yang dibagi dengan pembagi. Perbedaannya menjadi bilangan yang dibagi.

7. Bilangan yang dibagi dan jawabannya digeser ke kiri 1 bit lagi. Karena bilangan yang dibagi masih lebih besar dari pada bilangan pembagi, maka kemudian meletakkan 1 (satu) pada kolom jawaban.

8. Kurangi bilangan yang dibagi dengan pembagi. Sisa pembagian diletakkan pada poisis bilangan yang dibagi.

9. Jika sisa tidak sama dengan 0 (nol), proses pembagian dapat dilanjutkan tetapi hasilnya berisi pecahan.

0 0 1 0 0 1 0 1

0 0 0 0 1 0 1 Hasil (jawaban)

Bilangan yang dibagi setelah pengurangan Bilangan pembagi 0 0 0

0 0 0 1 0 1 0 0

0 0 1 0 0 1 0 1

0 0 0 0 1 0 1 1 Hasil (jawaban)

Bilangan yang dibagi

Bilangan pembagi 0 0 0 1 0 1 0 0

0 0 0 1 0 0 0 1

0 0 0 0 1 0 1 1 Hasil (11)

Sisa pembagian (17)

(4)

Berdasarkan algoritma di atas, dipaelukan 3 (tiga) lokasi memori untuk menyimpan bilangan yang dibagi, bilangan pembagi, dan hasilnya.

Percobaan 7.1 :

(5)

Diagram alirnya :

Pernyataan LD H,A dan LD H,A dapat diganti dengan LD HL,0. Tetapi perintah ini memerlukan memori sebanyak 3 byte dan waktu pelaksanaannya adalah 10 clock cycle. Pada contoh di atas digunakan perintah LD H,A dan LD H,A (A di-nol-kan dengan XOR A). Perintah itu hanya memerlukan memory 2 byte dan dilaksanakan dalam waktu 8 clock cycle.

Mulai

Selesai A (A – 1)

Simpan hasilnya HL = 0

Carry 0

Hubungkan HL dan DE secara berurutan, kamudian geser ke kiri 1 bit

Bandingkan HL dan BC. Jika HL lebih besar dari pada BC, kurangi HL dengan BC. Jika sebaliknya

tidak ada pengurangan

Jika ada pengurangan, carry = 1. Jika sebaliknya, carry = 0. Pindahkan carry ke DE bit paling kanan.

A = 16 (Penghitung)

(Register untuk

(6)

Perintah-perintah penjumlahan dan pengurangan dapat digunakan untuk operasi-operasi GESER KIRI atau ROTASI. Dalam contoh di atas, perintah ADC HL,HL sama dengan merotasikan data 16 bit pada pasangan HL ke kiri 1 bit (bit yang dipindahkan ke carry flag berasal dari register D bit paling kiri). Perhatikan fungsi perintah-perintah berikut :

ADD A,A Geser register A ke kiri 1 bit, atau kalikan A dengan 2. ADC A,A Rotasikan A ke kiri 1 bit.

ADD HL,HL Geser HL ke kiri 1 bit, atau kalikan dengan 2. ADC HL,HL Rotasikan HL ke kiri 1 bit.

ADD IX,IX Geser IX ke kiri 1 bir, atau kelikan dengan 2. ADD IY,IY Geser IY ke kiri 1 bir, atau kelikan dengan 2.

Masukkan program di atas ke MPF-1, kemudian jalankan dan periksalah status register-register yang terlibat (AF, BC, DE, dan HL). Cocockkan hasilnya dengan perhitungan secara manual.

Percobaan 7.2 :

Gantilah perintah terakhir (RET) pada percobaan 7.1 (subroutine pembagian) di atas dengan perintah RST 38h kemudian jalankan. Catatlah hasilnya pada tabel berikut :

Yang dibagi Pembagi Jawab Sisa Pemeriksaan

8686h 0020h 0434h 0006h

FFFFh 0003h 5555h 0000h

5A48h 0142h 0047h 00FAh

0h 0142h 0000h 0000h

(7)

Percobaan 7.3 :

Ubahlah program di atas sedemikian rupa sehingga proses pembagian dapat dilanjutkan sampai diperoleh hasil pecahan 1 bit.

Percobaan 7.4 :

Dengan mempergunakan program di atas sebagai subroutine, rancanglah program utama untuk membagi data di RAM pada alamat 1A00h s/d 1A01h dengan data di RAM pada alamat 1A04h s/d 1A05h. Hasilnya harus disimpan pada alamat 1A00h s/d 1A01h. Sebagai bahan pertimbangan, gunakan program berikut :

Org 1900h LD DE,(1A00h) LD BC,(1A04h) CALL Pembagian LD (1A00h),HL RST 38h

Percobaan 7.5 :

Referensi

Dokumen terkait