pembagian biner mpf7

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 teknikteknik 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.

Hasil (jawaban)
11101101

Bilangan pembagi (20)


00010100

2.

Bilangan yang dibagi (237)

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).
0

Hasil (jawaban)

11101101

Bilangan yang dibagi


000101000000000

41

Bilangan pembagi

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 :
00001

Hasil (jawaban)


11101101

Bilangan yang dibagi

00010100000

4.

Bilangan pembagi

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

Hasil (jawaban)

01001101

Bilangan yang dibagi

setelah pengurangan

00010100000

5.

Bilangan pembagi

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

Hasil (jawaban)

01001101

Bilangan yang dibagi

000101000


42

Bilangan pembagi

6.

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

Hasil (jawaban)

00100101

Bilangan yang dibagi
setelah pengurangan

000101000

7.


Bilangan pembagi

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.

00001011

Hasil (jawaban)

00100101

Bilangan yang dibagi

00010100

Bilangan pembagi


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

9.

00001011

Hasil (11)

00010001

Sisa pembagian (17)

00010100

Bilangan pembagi

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


43

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

Percobaan 7.1 :
Merancang sebuah program untuk membagi data 16 bit di pasangan register
DE dengan data 16 bit pada pasangan register BC. Hasilnya harus disimpan pada
pasangan register DE dan sisanya pada pasangan regiater HL. Seperti diketahui
bahwa pasangan register HL dapat digunakan sebagai register untuk mengerjakan
operasi pengurangan aritmatik 16 bit. Geser data 16 bit yang ada di DE ke kiri 1 bit
ke pasangan register HL. Bandingkan HL dengan BC. Jika HL lebih besar dari pada
BC, kurangi HL dengan BC dan carry flag secara otomatis akan di-set menjadi 1
(satu). Jika sebaliknya, tidak akan ada operasi pengurangan dan carry flag akan
menjadi 0 (nol). Karena bit register DE yang paling kanan sekarang menjadi kosong,
carry flag dipindahkan ke posisi ini. Perhatikan mnemonik dan diagram alir program
berikut.

Mnemonik subroutine pembagian :

Org
XOR
LD
LD
LD

1800h
A
H,A
L,A
A,16

DV0 :

RL
RL
ADC
SBC
JR
ADD


E
D
HL,HL
HL,BC
NC,DV1
HL,BC

DV1 :

CCF
DEC
JR
EX
ADC
RET

A
NZ,DV0
DE,HL

HL,HL

44

Diagram alirnya :

Mulai
A = 16

(Penghitung)

HL = 0

(Register untuk
mengerjakan pengurangan)

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 – 1)

A

Simpan hasilnya
Selesai

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.

45

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

8686h

0020h

0434h

0006h

FFFFh

0003h

5555h

0000h

5A48h

0142h

0047h

00FAh

0h

0142h

0000h

0000h

1234h

0h

FFFFh

1234h

46

Sisa

Pemeriksaan

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 :
Rancanglah sebuah program untuk membagi data 4 byte yang tersimpan pada
alamat 1A00h s/d 1A03h dengan data 4 byte yang tersimpan pada memori yang
alamatnya ditunjukkan oleh pasangan register HL. Hasilnya disimpan pada alamat
1A00h s/d 1A03h. Sisanya disimpan pada alamat 1A04h s/d 1A07h.

47