You are on page 1of 9

LOGIKA ARITMATIKA PADA SISTEM BINER

1. Pembagian Proses pembagian pada sistem biner menggunakan proses pembagian berekor yaitu sebagai berikut: - Kurangi bilangan yang dibagi dengan kelipatan pembagi yang berbobot tertinggi - Jumlah kelipatan x bobot yang merupakan hasil bagin dijumlahkan dengan hasil bagin-1 - Bila sisa bagi (bilangan yang dibagi kelipatan pembagi berbobot tertinggi) >= pembagi, lakukan step 1 dan 2 hingga diperoleh kelipatan pembagi berbobot tertinggi < pembagi - Hasil Bagi dan sisa bagi telah ditemukan
Bilangan pembagi

1x101 + 3x100 3 40 30 10 9 1 (a)

Bilangan yg dibagi kelipatan pembagi x bobot tertinggi yg paling mendekati bilangan yg dibagi Sisa bagi1 kelipatan pembagi x bobot tertinggi yg paling mendekati Sisa bagi 1 Sisa bagi2

23
Bilangan pembagi

22

20

(1 x 1000) + (1 x 100) + (1 x 1) 0011 0010 1000 0001 1000 0001 0000 0000 1100 0000 0100 0000 0011 0000 0001 (b)
Bilangan yg dibagi kelipatan pembagi x bobot tertinggi yg paling mendekati bilangan yg dibagi Sisa bagi 1 kelipatan pembagi x bobot tertinggi yg paling mendekati Sisa bagi1 kelipatan pembagi x bobot tertinggi yg paling mendekati Sisa bagi2

Sisa bagi 2

Sisa bagi 3

Perbedaan antara proses desimal dengan biner adalah bobot bilangannya, bila pada proses desimal bobot bilangan adalah merupakan kepangkatan dari 10, maka pada proses biner, bobot bilangan adalah merupakan kepangkatan dari 2. Pada proses pembagian di atas terdapat dua buah proses yaitu - Pengurangan terhadap kelipatan pembagi berbobot tertinggi - Penjumlahan hasil bagi dengan hasil bagi sebelumnya setiap kali terjadi pengurangan dengan terhadap kelipatan pembagi berbobot tertinggi terjadi

Pengurangan terhadap kelipatan pembagi berbobot tertinggi Kelipatan pembagi berbobot tertinggi adalah sebagai berikut: - Pada bilangan yang akan dibagi 40 atau 28H atau 0010 1000 biner dengan pembagi 0011 biner maka kelipatan pembagi - Apabila sebuah pointer digeser satu per satu dari bagian MSB ke kanan, maka akan ditemukan sebuah bilangan yang >= pembagi saat pointer menunjuk bit ke 3 yaitu 00101 biner yang merupakan bilangan terhitung dari MSB hingga bit 3.
7 6 5 4 3 2 1 0

0010 1000 Bilangan biner 0101 dapat dikurangi dengan bilangan pembagi sebanyak sekali, oleh karena itu kelipatan pembagi adalah 1 x pembagi atau 0011. Di belakang bit ketiga masih ada 3 buah bit lagi yaitu bit 2, bit 1 dan bit 0 oleh karena itu bobot dari bilangan adalah kepangkatan 3 dari dasar bilangan atau 23 Di sini telah ditemukan bahwa kelipatan pembagi berbobot tertinggi untuk bilangan 0010 1000 biner dengan pembagi 0011 biner adalah 0011 x 1000 = 0011000 atau 3 x 23 = 24

Untuk melakukan proses pengurangan antara bilangan yang dibagi dengan kelipatan pembagi berbobot tertinggi pada mikrokontroler, maka hal ini dapat dilakukan dengan: - Menggeser ke kiri bilangan yang dibagi ke suatu memori tertentu yang selanjutnya digunakan untuk menyimpan sisa bagi sebanyak 8 kali bila bilangan yang diproses hanya menempati area 8 bit. - Mengurangi isi memori sisa bagi dengan bilangan pembagi saat ditemukan isi memori sisa bagi >= bilangan pembagi - Isi memori sisa bagi adalah merupakan pengurangan dari bilangan yang dibagi dengan kelipatan pembagi berbobot tertinggi - Contoh:

0010 1000 : 0011


Bilangan yg dibagi
1 2 3 4 5 6 7 8

Sisa Bagi

0101 0000 1010 0000 0100 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0001 0000 0010 0000 0101 >= pembagi
0000 0010 0000 0101 0000 0011 0000 0100 0000 0011 0000 0100 0000 0011

0000 0100 >= pembagi 0000 0001 0000 0010 0000 0100 >= pembagi
0000 0001

Gambar 1 Proses pengurangan yang terjadi pada sistem pembagian berekor Pada proses di atas, bila setelah ditemukan isi memori sisa bagi >= bilangan pembagi (0011) yang pertama kali pergeseran terus dilakukan tanpa melakukan pengurangan dengan pembagi pada step-step berikutnya maka, proses ini sudah merupakan pengurangan bilangan yang dibagi dengan kelipatan pembagi berbobot tertinggi, hal ini disebabkan karena: i. Pada saat isi memori sisa bagi dikurangi dengan pembagi maka proses pengurangan antara bilangan yang dibagi dengan kelipatan pembagi telah dilakukan. ii. Pergeseran yang dilakukan pada step-step berikutnya adalah merupakan perkalian hasil pada step i dengan bobot tertinggi yaitu dalam contoh di atas adalah 23 Namun pada sistem pembagian berekor, proses pengurangan terhadap kelipatan pembagi berbobot tertinggi terus diulang hingga ditemukan sisa dari pembagian < bilangan pembagi. Saat sisa dari pembagian masih >= bilangan pembagi, maka Sisa Pembagian tersebut harus selalu dikurangi dengan kelipatan pembagi berbobot tertinggi. Hal ini dapat dilakukan dengan melakukan pengurangan terhadap bilangan pembagi setiap kali ditemukan isi memori sisa bagi >= bilangan pembagi. Seperti yang tampak pada contoh di atas, proses pengurangan pada memori sisa bagi juga berlangsung pada step 6 dan step 8. Pada step-step tersebut isi memori sisa bagi dikurangi dengan kelipatan pembagi berbobot tertinggi saat itu. Contohnya pada step 6, isi memori sisa bagi dikurangi dengan 0011 x 0100 atau 3 x 22 di mana 3 adalah kelipatan pembagi dan 22 adalah bobot tertinggi dari kelipatan pembagi yang diperoleh dengan sisa bagi yang ada saat itu.

Penjumlahan hasil bagi dengan hasil bagi sebelumnya setiap kali terjadi pengurangan dengan terhadap kelipatan pembagi berbobot tertinggi terjadi Dalam mikrokontroler, hal ini dapat dilakukan dengan:

Menggeser ke kiri isi memori hasil bagi sebanyak 8 x bila bilangan yang diproses hanya menempati area 8 bit. Menambah satu (increment) memori hasil bagi setiap kali ditemukan isi memori sisa bagi >= bilangan pembagi.

Seperti yang terlihat pada gambar 1, proses pengurangan sisa bagi (karena memori sisa bagi >= bilangan pembagi) terjadi pada step 5, step 6 dan step 8, maka hanya pada step-step tersebut saja terjadi increment dan pergeseran ke kiri sedangkan pada step 7 hanya dilakukan pergeseran ke kiri seperti pada gambar 2.
Terjadi pengurangan sisa bagi maka hasil bagi + 1 dan geser kiri Tidak terjadi pengurangan sisa bagi maka hasil bagi Terjadi pengurangan geser kiri sisa bagi maka hasil bagi + 1 dan geser kiri Terjadi pengurangan sisa bagi maka hasil bagi + 1 dan geser kiri

5 6 7 8

0000 0001 0000 0010 0000 0101 0000 1011

Gambar 2 Penjumlahan Hasil Bagi

Pada step 1 hingga 4 sebetulnya juga terdapat proses pergeseran ke kiri, namun pada saat itu isi memori hasil bagi hanyalah 0000 0000 saja sehingga proses pergeseran tidak mengubah isi memori tersebut. Pada step 5 terlihat terdapat penambahan angka 1 dan selanjutnya angka tersebut terus bergeser ke kiri sebanyak 3x hingga akhir step, hal ini ekivalen dengan penambahan 1 x 1000 atau 1 x 23 Pada step 6 terlihat terdapat penambahan angka 1 dan selanjutnya angka tersebut terus bergeser ke kiri sebanyak 2x hingga akhir step, hal ini ekivalen dengan penambahan 1 x 100 atau 1 x 22 Pada step 5 terlihat terdapat penambahan angka 1 dan selanjutnya angka tersebut terus bergeser ke kiri sebanyak 0x atau tidak bergeser hingga akhir step, hal ini ekivalen dengan penambahan 1 x 1 atau 1 x 20 Maka total penjumlahan hasil bagi adalah 1 x 1000 + 1 x 100 + 1 x 1 = 1011 biner Alur Program dalam Mikrokontroler

R3=Size*8

Size = ukuran bit dari bilangan yang dioperasikan

Hasil Bagi=0 Sisa Bagi = 0

Operand adalah bilangan yang dibagi

Operand Geser Kiri Sisa Bagi Geser Kiri

Sisa Bagi < Pembagi?

No Sisa Bagi=sisa Bagi-Pembagi

Pengurangan sisa bagi dengan kelipatan pembagi berbobot tertinggi dilakukan

Yes

Increment Hasil Bagi

Increment Hasil bagi dilakukan

Geser Kiri Hasil Bagi

R3=0?

Proses selesai

2. Perkalian Proses perkalian dilakukan dengan menggunakan mengalikan bilangan yang akan dikali dengan masing- masing bobot dari pengali.
Desimal Hexa Biner

30 3 x

1E 3 x

0001 1101 0011


x

0001 1101 x 10 + 0001 1101 x 1 biner atau 30 x 21 + 30 x 20

Gambar 3 Proses perkalian

0001 1101 0011


Isi bit yg ditunjuk tidak 0 Hasil Kali = Hasil kali + 0001 1101

0011 1010 0011


Isi bit yg ditunjuk tidak 0 Hasil Kali = Hasil kali + 0011 1010 atau 21 desimal X 0001 1101 biner

Gambar 4 Proses logika perkalian Pada gambar di atas tampak sebuah pointer pada bilangan pengali bergeser ke kiri sedangkan bilangan yang akan dikali bergeser ke kiri saat step kedua (untuk mengali dengan 21 ) Pada mikrokontroler pergeseran ke kiri pointer pada bilangan pengali dapat dilakukan dengan menggeser ke kanan bilangan pengali beserta carry flag, sedangkan pergeseran ke kiri bilangan yang dikali tetap dilakukan dengan menggeser ke kiri isi memori bilangan yang akan dikali. Oleh karena itu, proses perkalian dapat dilakukan dengan: - Menggeser ke kanan bilangan pengali beserta carry - Setiap kali carry flag = 1, di mana ekivalen dengan pointer menunjuk ke bit yang bukan 0 (gambar 4), maka jumlahkan bilangan yang dikali dengan hasil kali - Geser kiri bilangan yang akan dikali baik terjadi atau tidak terjadi carry. - Proses dilakukan sebanyak jumlah bit dari bilangan yang diproses. - Hasil perkalian akan tersimpan di memori hasil kali
R3=Size*8

Geser Kanan Pengali

Ada Carry?

No

HasilKali=Operand + HasilKali Geser Kiri Operand

R3=0?

Listing Program (diambil dari http://alds.stts.edu dan diassembly oleh Software ALDS 3.2)
**************** RUTIN-RUTIN ARIMATIKA DAN KONVERSI ************* ; ;Cara Penggunaan Subroutine ;- Subroutine penambahan & pengurangan ; - Isi Operand dan Operand 2 ; - R0 pada Operand dan R1 pada Operand2 ; - Panggil subroutine penambahan/pengurangan ; - Operand 2 berfungsi sebagai nilai pengurang pada subroutine ; pengurangan ; - Hasil terdapat pada lokasi operand ;- Subroutine melihat hasil ; - Set R0 pada digit terbesar dari memori yang dilihat ; - Panggil Subroutine Lihat Hasil ;- Subroutine pembagian/perkalian ; - Isi operand dengan bilangan yang akan dibagi/dikali ; - Isi hasil kali/hasil bagi dengan bilangan pengali/pembagi ; - Panggil Subroutine perkalian/pembagian ; - Hasil terdapat pada bagian yg ditunjuk oleh hasil kali/hasil bagi 0000 0000 0003=SizeX 4 byte 0000=Lokasi_Titik .DATA ORG * EQU 3 EQU 0

;Aritmatik Operasi

;VARIABEL 0000 Operand: DS SizeX dikurang/ditambah 0003 Operand2: DS SizeX pengurang/penambah 0006 Pembagi: DS SizeX 0009 HasilBagi: DS SizeX 000C SisaBagi: DS SizeX (hanya digunakan pada ;Subroutine konversi bilangan dasar) 0006=Pengali EQU Pembagi lokasi pembagi 0009=HasilKali EQU HasilBagi = lokasi hasil bagi 0000 0000 .CODE ORG *

;Bilangan yang ;Bilangan ;Bilangan pembagi ;Hasil bagi ;Sisa pembagian

;Lokasi pengali = ;Lokasi hasil kali

;RUTIN-RUTIN ARITMATIKA Pembagian: 78 09 MOV R0,#HasilBagi 11 32 =0032 ACALL HapusNilai 78 0C MOV R0,#SisaBagi 11 32 =0032 ACALL HapusNilai ; 0008 7B 18 MOV R3,#SizeX*8 000A LoopPembagian: 000A C3 CLR C 000B 78 00 MOV R0,#Operand 000D 11 29 =0029 ACALL GeserKiri1X 0000 0000 0002 0004 0006

000F 78 0C MOV R0,#SisaBagi 0011 11 29 =0029 ACALL GeserKiri1X ; 0013 78 0C MOV R0,#SisaBagi 0015 79 06 MOV R1,#Pembagi 0017 11 3A =003A ACALL Perbandingan 0019 40 06 =0021 JC JanganDikurangi skip! ; 001B 78 0C MOV R0,#SisaBagi 001D 79 06 MOV R1,#Pembagi 001F 11 44 =0044 ACALL Pengurangan SisaBagi:=SisaBagi-Pembagi 0021 JanganDikurangi: 0021 B3 CPL C 0022 78 09 MOV R0,#HasilBagi 0024 11 29 =0029 ACALL GeserKiri1X 0026 DB E2 =000A DJNZ R3,LoopPembagian 0028 22 RET 0029 GeserKiri1X: 0029 7A 03 MOV R2,#SizeX 002B LeftShift: 002B E6 MOV A,@R0 002C 33 RLC A 002D F6 MOV @R0,A 002E 08 INC R0 002F DA FA =002B DJNZ R2,LeftShift 0031 22 RET 0032 0032 0034 0034 0036 0037 0039 003A 003A 003B 003D 003D 003E 003F 0040 0041 0043 0044 0044 0045 0047 0047 0048 0049 004A 004B 004C 004E 004F HapusNilai: MOV R2,#SizeX LoopHapus: MOV @R0,#0 INC R0 =0034 DJNZ R2,LoopHapus RET Perbandingan: CLR C MOV R2,#SizeX LoopPerbandingan: MOV A,@R0 SUBB A,@R1 INC R1 INC R0 =003D DJNZ R2,LoopPerbandingan RET Pengurangan: CLR C MOV R2,#SizeX LoopPengurangan: MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 =0047 DJNZ R2,LoopPengurangan RET Perkalian:

SisaBagi-Pembagi? SisaBagi<Pembagi,

Simpan hasil

7A 03 76 00 08 DA FB 22

C3 7A 03 E6 97 09 08 DA FA 22

C3 7A 03 E6 97 F6 08 09 DA F9 22

004F 78 09 0051 11 32 0053 7B 18 0055 0055 0056 0058 005A 005A 005B 005C 005D 005E 0060 0062 0064 0066 0068 0068 0069 006B 006D 006F 0070 0070 0071 0073 0073 0074 0075 0076 0077 0078 007A

=0032

MOV R0,#HasilKali ACALL HapusNilai MOV R3,#SizeX*8

C3 78 08 7A 03 E6 13 F6 18 DA 50 78 79 11

FA 06 09 00 70

LoopPerkalian: CLR C MOV R0,#Pengali 1 MOV R2,#SizeX GeserKanan: MOV A,@R0 RRC A MOV @R0,A DEC R0 =005A DJNZ R2,GeserKanan =0068 JNC JanganDitambah MOV R0,#HasilKali MOV R1,#Operand =0070 ACALL Penambahan JanganDitambah: CLR C MOV R0,#Operand =0029 ACALL GeserKiri1X =0055 DJNZ R3,LoopPerkalian RET Penambahan: CLR C MOV R2,#SizeX LoopPenambahan: MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 =0073 DJNZ R2,LoopPenambahan RET

C3 78 00 11 29 DB E6 22

C3 7A 03 E6 37 F6 08 09 DA F9 22

You might also like