Morlan Pardede, MT
Perkalian dan Pembagian Bilangan Biner
MODUL 3
PERKALIAN DAN PEMBAGAIAN BILANGAN BINER
A. TUJUAN
1. Membuat program perkalian dua bilangan biner
2. Membuat program pembagian bilangan biner
3. Membuat program perkalian Biner dengan sign-bit
B. Dasar Teori
1. Perkalian Biner
Perkalian bilangan dapat dilakukan dengan pegulangan menjumlahkan bilangan yang
dikali sebanyak pengali, menjumlahkan hasil kali bobot biner 1 dari pengali dengan bilangan
dikali. Sebagai contoh 6 x 10 maka bobot biner 1 pengali adalah 2 dan 8.
8 4 2 1 (Bobot)
10 = 1 0 1 0 2
12
48 +
60
Mengalikan bilangan dengan 2 dapat dilakukan dengan menggeser bilangan tersebut ke kiri
satu bit. Untuk mengalikan dengan 4 dilakukan dengan menggerser bilangan terssebut dua
kali, untuk mengali 8 dengan menggeser tiga kali. Untuk mengali dengan 10 dilakukan
dengan menjumlahkan hasil kali 8 dengan hasil kali 2.
Berikut ini merupakan program mengalikan isi register HL dengan 10.
Program 1. Program Kali 10.
Label: Mnemonic Komentar
Kali10: DAD H HL=HL x 2
MOV D,H Simpan hasil kali 2
MOV E,L
DAD H HL= HL dikali 4
DAD H HL=HL dikali 8
DAD D HL= HL dikali 10
RET
Perkalian yang umum dilakukan adalah perkalian biner yaitu dengan cara mengeser dan
menjumlahkan. Bilangan pengali digeser 1 bit ke kanan dimana jika bit b0 sebelumnya (bit
Cy) logika 1 maka hasil dijumlahkan dengan bilangan dikali. Selanjutnya bilangan dikali
digerser 1 bit ke kiri dengan bit b0=0 seperti ditunjukkan gambar berikut:
PERKALIAN
Periksa Pengali
Ya
1001 (9) 00? Selesai
x 1101 (13) Tdk
1110101 (117)
Hasil=Hasil+ bil.dikali
Bil. Dikali Ya
Negatipkan Bil.Dikali
negatip
?
Tdk
Periksa Bil.Pengali
Ya
Pengali
Negatipkan Pengali
Negatip
?
Tdk
Kalikan
Hasil Kali
Ya
Negatip? Negatipkan Hasil
Tdk
Selesai
Tanda bilangan terdapat pada bit b7 dimana jika logika 1 berarti negatip dan jika logika 0
berarti positip. Untuk mendapatkan tanda hasil dapat dilakukan dengan melogik EX-OR
pengali dengan dikali dan memeriksa bit-7 dari hasil. Jika bit b7 logika 1 berarti negatip.
Pengecekan sign bit ini dapat dilakukan dengan perintah JP (Jump if Positip) atau JM (Jump
if minus). Berikut ini diberikan program perkalian biner isi register A dengan isi register E
dengan tanda dan hasilnya terdapat pada register HL.
Program 3. Perkalian dengan tanda
;Dalam BCD: 100 x-05 =-500
;64H x FBH=FE0CH
ORG 8100H
MVI A, 64H ; Set bil. Dikali 100
MVI E, 0FBH ; Set bil. Pengali 05
LXI SP,8200H
PUSH PSW ;Amankan pengali
XRA E ; Ambil tanda hasil kali
MOV B,A ;Simpan tanda hasil kali
MOV A,E ;Periksa tanda bil dikali.
ORA A ; dengan operasi OR
JP POSITIP1 ;Lompat jika positip
CMA ; Jika negatip komplement ke-2
INR A ;bil dikali
MOV E,A ;Simpan bil.dikali
POSITIP1: POP PSW ;Ambil bil. pengali
ORA A ;Periksa tanda bil pengali
JP POSITIP2 ;Lompat jika positip
CMA ;Komplement ke-2 bil pengali
INR A
POSITIP2: CALL KALI ;Kalikan
MOV A,B ; Ambil tanda hasil
ORA A
JP SELESAI ;Jika positip selesai
MOV A,H ;Jika negtip
CMA ;Hasil kali dikomplement ke-2
MOV H,A
MOV A,L
CMA
MOV L,A
INX H
SELESAI: HLT ;Selesai
Catatan: Untuk melihat tanda hasil kali dilakukan dengan meng EX-Orkan pengali dengan
bil. Dikali. Sehingga jika bit b7 kedua bilangan sama maka bit b7 hasil akan 0 dan jika
berbeda bit b7 akan 1. Instruksi JP akan memeriksa bit b7 dimana jika logika 0 maka
program akan melompat. Saat operasi OR bit Cy akan logika 0 sehingga saat operasi RAR
dilakukan akan membuat bit b7 logika 0.
3. Pembagian Biner
Dengan menggeser register A ke kanan maka akan menghasilkan bilangan yang ada
pada register A tersebut dibagi dua dengan sisa bagi terdapat pada bit Cy.
Bagi4: ORA A ;Cy=0
RAR ;Geser ke kanan 1101
ORA A ;Cy=0
RAR ;Geser ke kanan 1001 1110101
1001
RET (1)
Operasi pembagaian di atas hanya berlaku jika 01011
1001
hasilnya bilangan bulat. Untuk pembagian biner (1)
00100
secara umum dilakukan dengan cara pembagian 1001 (0)
biner seperti ditunjukkan pada gambar berikut. 1001
1001 (1)
0
Gambar Proses pembagian biner
Pembagi
0001101 Bil.Dibagi
Set Counter=Banyak bit bil.Dibagi
Buffer
1001 0001 (1) 1110101
Bandingkan
1001 Clear Buffer
0011 Hasil=0
Bandingkan 1001
0111 Hasil=0 Geser Hasil ke kiri
Bandingkan
1001 dengan bit b0=0
1110 Hasil=0
Kurangkan
1001 - Geser bil. Dibagi ke kiri 1 bit
(bit MSB ke bit Cy)
Geser
0101 Hasil=1
1011
Geser buffer ke kiri 1 bit
Kurangkan
1001 - (bit MSB bil.dibagi ke bit b0 buffer)
Geser 0010
Hasil=1
Buffer=Buffer-Pembagi
Kurangi Counter
Tdk
0?
Ya
Selesai
C. Percobaan
1. Percobaan perkalian Biner.
-Buka program simulator
-Masukkan program 2 (perkalian biner)
-Simulasikan Program dengan langkah-demi langkah
-Catat hasil setiap perintah pada setiap loop
-Analisa hasil program, berapa kali pengulangan (loop) yang terjadi saat program tersebut
dieksekusi.
-Berikan kesimpulan anda
- Analisa hasil hasil program tersebut, berapa kali pengulangan (loop) terjadi saat program
tersebut dieksekusi.
- Berikan kesimpul anda.
5.- Buat program pembagian biner sesuai dengan diagram alir yang diberikan
- Simulasikan program anda tersebut
- Berikan analisa data dari hasil percobaan
- Bandingkan program yang anda buat dengan program 4 dari segi jumlah byte program dan
lamanya dieksekusi.
6. Mengapa jika pembagi lebih besar dari 80H hasil terkadang salah? (2710H : C8H)