Tipe Data Dan Directive Pada MCS-51

| | Tidak ada komentar
Pada artikel ini akan dibahas tentang beberapa tipe data dan directive apa saja yang didukung oleh assembler dari keluarga 8051. Pada dasarnya, keluarga 8051 hanya memiliki 1 jenis tipe data, yaitu 8-bit. Ukuran dari setiap registernya adalah 8-bit. Jika ternyata data yang hendak diproses ternyata lebih besar dari 8–bit, maka programer harus memecah data menjadi beberapa data 8-bit agar dapat diproses oleh CPU.

DB (Define Byte)

Directive DB ini digunakan secara luas dalam proses assembly oleh assembler. Directive ini digunakan untuk mendefinisikan data 8-bit pada memori program. Saat DB digunakan untuk medefinisikan suatu data, maka data tersebut dapat berupa bilangan desimal, biner, hex, ataupun karakter-karakter ASCII. Untuk desimal, simbol "D" atau "d" setelah bilangan angka desimal boleh ditambahkan atau tidak. Walaupun demikian data desimal tersebut akan dikonversikan menjadi bilangan hex oleh assembler. Untuk mendefinisikan karakter ASCII, maka cukup mudah, yakni dengan menempatkan simbol tanda petik satu atau quotation mark, misalnya (‘seperti ini’). Kemudian assembler akan mengubah setiap karakter ASCII tersebut menjadi kode-kode hex seperti yang sudah diatur dalam format ASCII. Perhatikan beberapa contoh penggunaan DB dibawah ini:
        ORG  500H
DATA1:  DB   28                 ;DESIMAL (1C dalam hex)
DATA2:  DB   00110101B          ;BINER   (35 dalam hex)
DATA3:  DB   39H                ;HEKSADESIMAL
        ORG  510H
DATA4:  DB   "2591"             ;BILANGAN ASCII
        ORG  51BH
DATA5:  DB   "Bespus Community" ;KARAKTER ASCII
Baik tanda kutip tunggal ataupun ganda, keduanya dapat digunakan pada string ASCII. Hal ini akan berguna dalam kasus dimana sebuah string berisi tanda kutip tunggal, seperti "Al-Qur'an". DB juga dapat digunakan untuk mengalokasikan memori dalam byte-sized chunks.

ORG (Origin)

Directive ORG digunakan untuk mengindikasikan awal dari alamat. Artinya adalah kode berikutnya akan ditempatkan oleh assembler yang berawal pada alamat yang dideklarasikan oleh direcive ORG ini. Bilangan setelah simbol ORG ini boleh berbentuk desimal maupun hex. Jika bilangan ternyata tidak diikuti oleh symbol "h", maka nanti assembler akan merubahnya menjadi bentuk hex.

EQU (Equate)

Directive ini digunakan untuk mendefinisikan sebuah konstanta tanpa menuntut disediakannya sebuah lokasi memori. Biasanya simbol EQU ini digunakan sebagai data masukan langsung (immediate). Untuk lebih jelasnya dapat anda lihat pada contoh dibawah ini:
     COUNT  EQU 25
     ...    ...
     MOV    R3,#COUNT
Ketika menjalankan instruksi "MOV R3,#COUNT", register R3 akan diisikan dengan nilai 25 (perhatikan tanda #). Apa keuntungan dari penggunaan EQU? Asumsikan bahwa ada sebuah konstanta (nilai tetap) yang digunakan dibeberapa tempat dalam suatu program, dan suatu ketika programmer ingin mengubah nilai tersebut. Dengan menggunakan EQU, programer hanya harus mengubahnya sekali dibagian EQU saja dan assemblerlah yang akan mengubah seluruh konstanta yang bersangkutan tersebut.

Directive END

Pseudocode penting lainnya adalah directive END. Dimana directive ini akan memberitahukan kepada assembler bahwa disitulah akhir dari suatu program assembly 8051, yang berarti bahwa pada kode sumber jika terdapat kode lainnya setelah directive END maka akan diabaikan oleh assembler. Beberapa assembler menggunakan ".END" (dengan tanda titik) bukan "END".

Aturan Untuk Label Dalam Bahasa Assembly

Dalam memilih nama dari sebuah label, idealnya adalah nama yang sangat singkat namun penuh arti. Sehingga programmer dapat membuat program menjadi sangat mudah dan cepat. Ada beberapa aturan yang harus programer ikuti. Pertama adalah Setiap Label (atau simbol) haruslah unik (tidak sama). Karakter yang boleh digunakan untuk label bisa terdiri dari huruf abjad, angka 0 s/d 9, dan karakter khusus seperti tanda tanya (?), titik (.), at (@), garis bawah (_), dan tanda dollar ($). Namun karakter pertama dari nama label harus berupa huruf abjad, dengan kata lain tidak boleh berupa angka. Setiap assembler memiliki beberapa kata "reserved" yang tidak boleh digunakan sebagai label dalam program. Terutama adalah kata-kata yang telah digunakan untuk instruksi mnemonic, seperti "MOV" dan "ADD". Selain mnemonic, ada beberapa kata lain yang tidak boleh digunakan. Untuk lebih jelasnya, periksalah kembali assembler yang anda gunakan.

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Program Counter dan Ruang ROM Pada MCS-51

| | Tidak ada komentar
Pada artikel ini akan dijelaskan tentang register Program Counter (PC) dalam proses menjalankan perintah pada program 8051. Disini juga akan dibahas tentang ruang (space) ROM untuk berbagai variant dari keluarga 8051.

Program Counter Pada 8051

Regsiter 8051 penting lainnya adalah PC (Program Counter). Program Couter adalah penunjuk lokasi alamat selanjutnya yang hendak dijalanakan. Setelah CPU membaca program dari ROM program, program Counter kemudian di-increment (ditambah satu bilangan) yang berarti menunjuk pada alamat byte selanjutnya dalam ROM Porgram. Program Counter pada 8051 termasuk ke dalam register 16-bit. Artinya 8051 dapat mengakses program mulai dari alamata 0000 s/d FFFFh, sehingga totalnya adalah 64 Kbytes. Namun tidak semua variant keluarga 8051 memiliki ROM program sebanyak itu di dalam chip-nya. Beberapa diantaranya hanya memiliki 2 Kbytes atau bahkan tidak sama sekali sehingga membutuhkan ROM program tambahan eksternal.

Mulai Dari Mana 8051 Bekerja Saat Pertama Dihidupkan

Pertanyan yang harus kita tanyakan mengenai setiap mikrokontroler (mikroprosesor) adalah pada lokasi mana dari ROM program, sebuah CPU mememulai tugas-tugasnya saat kita mulai menyalakannya. Setiap mikroprosesor berbeda-beda, namun pada keluarga 8051 siapapun pabrik pembuat atau penjualnya, lokasi pertama yang dijalankan oleh 8051 saat pertama dihidupkan adalah lokasi 0000. Menghidupkan atau menyalakan yang dimaksudkan disini adalah dengan memeberikan tegangan sebesar Vcc pertama kali sesuai kebutuhan pin Vcc mikrokontroler tersebut. Atau penerapan perubahan kondisi pin Reset pada mikrokontroler. Dengan kata lain, saat 8051 pertama dihidupkan Program Counter akan selalu bernilai 0000. Yang berarti bahwa pada lokasi ini opcode pertama akan dijalankan. Untuk alasan inilah setiap program dalam 8051 harus dimulai dari lokasi 0000 dan dituliskan ke dalam ROM program juga dimulai dari alamat 0000. Kita dpat memastika agar assembler memulai penyusuan kode program dari alamat tersebut dengan memberikan direvative ORG dalam program kita.

Menempatkan Program Dalam ROM Program

Untuk lebih memahami tentang peran Program Counter dalam mengambil dan mejalankan sebuah program, kita akan mengkaji aksi dari Program Counter ini. Pertama, kita mengkaji sekali lagi file List dari program contoh pada artikel sebelumnya dan melihat bagaiaman kode tersebut ditempatkan pada ROM yang terdapat dalam chip 8051. Seperti yang kita lihat, bahwa opcode dan operand untuk setiap instruksi ditampilkan pada bagian sebelah kiri file tersebut.
0000               ORG   0H       ;Mulai program di alamat 0
0000  7D25         MOV   R5,#25H  ;Isikan 25H ke dalam R5
0002  7F34         MOV   R7,#34H  ;Isikan 34H ke dalam R7
0004  7400         MOV   A,#0     ;Isikan 0 ke dalam A
0006  2D           ADD   A,R5     ;Jumlahkan isi R5 dengan A (A=A+R5)
0007  2F           ADD   A,R7     ;Jumlahkan isi R7 dengan A (A=A+R7)
0008  2412         ADD   A,#12KH  ;Jumlahkan A dengan 12H (A=A+12H)
000A  80FE  HERE:  SJMP  HERE     ;Program berputar disini
000C               END            ;Akhir dari file sumber
Setelah program ditulis (burned) ke dalam ROM internal pada keluarga 8051 (misalnya AT89C51 atau DS5000), Opcode dan operand ditempatkan pada lokasi memori ROM yang beralamat 0000 seperti yang terlihat pada daftar dibawah ini.

Alamat ROM, opcode, dan assembly

Alamat dan opcodeDaftar tersebut menunjukkan alamat 0000 berisi 7D, dimana opcodenya adalah untuk mengisikan sebuah nilai ke register R5, dan alamat 0001 berisi operand (dalam daftar, terlihat 25h) yang diisikan ke dalam R5. Sehingga instruksi "MOV R5,#25h" memiliki kode mesin "7D25" dimana 7D adalah opcode dan 25 adalah operand. Hal yang sama juga terlihat pada kode mesin 7F34 yang berlokasi di alamat 0002 dan 0003, dimana ini merupakan representasi dari instruksi "MOV R7,#34h". Termasuk juga untuk kode mesin 7400 yang berada pada alamat 0004 dan 0005 adalah representasi dari instruksi "MOV A,#0". Lokasi memori 0006 memiliki opcode 2D, dimana itu adalah opcode untuk instruksi  "ADD  A,R5" dan lokasi memori 0007 berisi 2F yang merupakan opcode untuk instruksi "ADD A,R7". Opcode dari intstruksi "ADD A,#12h" berlokasi pada alamat 0009. memory lokasi 000A berisi opcode dari instruksi SJMP. Sedangkan alamat target dari opcode SJMP tersebut berada pada alamat 000B.

Menjalankan Program Byte Demi Byte

Anggaplah program di atas telah ditulis ke dalam ROM dari Chip 8051, berikut ini adalah penjelasan langkah-langkah dari kejadian dalam 8051 setelah catu daya dipasang.
  1. Ketika 8051 dinyalakan, PC (Program Counter) memiliki nilai 0000 dan mulai membaca opcode pertama, yaitu 7D, dimana kode tersebut berarti mengisikan operand ke dalam R5. Setelah menjalankan opcode tersebut, CPU dengan bantuan PC kembali membaca lokasi ROM program berikutnya, yaitu  25, dan selanjutnya menjalankan tugasnya yakni memindahkan nilai 25 pada R5. Sekarang 1 instruksi sudah selesai. Selanjutnya Program Counter di-increment ke lokasi opcode berikutnya (ke alamat 0002). PC = 0002, dimana berisi opcode 7F, yang berarti opcode untuk instruksi "MOV R7,…".
  2. Setelah menjalankan opcode 7F, nilai 34h lalu dipindahkan ke register R7. Kemudian Program Counter di-increment ke 0004.
  3. Alamat ROM 0004 berisi opcode untuk instruksi "MOV A,#0". Instruksi ini dijalankan dan sekarang PC bernilai 0006. Perlu diingat, bahwa instruksi diatas merupakan instruksi 2-byte, yang berarti instruksi tersebut menempati dua alamat memori.
  4. Sekarang PC = 0006 yang menunjuk pada alamat opcode dari instruksi "MOV ADD A,R5". Ini adalah instruksi 1-byte. Setelah menjalankan instruksi ini, PC bernilai 0007.
  5. Alamat 0007 berisi opcode 2F, dimana opcode ini adalah milik instruksi "ADD A,R7". Ini juga termasuk dalam instruksi 1-byte. Setelah CPU menjalankan instruksi tersebut, maka PC akan di-increment lagi menjadi 0008. Hal ini terus terjadi sampai semua instruksi dilaksanakan. Faktanya bahwa PC berisi lokasi alamat dari instruksi yang akan dieksekusi. Hal tersebutlah yang menyebabkan mengapa mikroprosesor sekelas X86 menyebut program counter ini sebagai instruction pointer.

Peta Memori ROM Pada Keluaraga 8051

Seperti yang kita ketahui, beberapa dari keluarga 8051 memiliki jumlah ROM program internal hanya sebesar 4Kb, seperti 8751 dan AT89C51. Beberapa di antaranya memiliki ukuran yang lebih besar, misalnya AT89C52 yang memiliki ROM program sebanyak 8Kb. Dallas Semiconductor’s DS5000-32 memiliki ROM program internal sebesar 32Kb, ada pula yang memiliki ukuran sebesar 64Kb. Perlu diingat, karena PC pada keluarga 8051 selebar 16-bit, maka jumlah memori Program ataupun data yang bisa dialamati hanya sampai sebatas 64Kb.

Gambar rentang alamat ROM pada chip 8051
Gambar rentang alamat ROM pada chip 8051

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Assembling dan Menjalankan Program MCS-51

| | Tidak ada komentar
Bentuk dasar dari program bahasa assembly telah dibahas pada artikel sebelumnya, pertanyaan berikutnya adalah: Bagaimana itu dibuat, dirakit, dan siap untuk dijalankan? Langkah-langkah untuk membuat program bahasa assembly yang siap untuk dijalankan akan diuraikan sebagai berikut:

Diagram langkah-langkah membuat sebuah program
Diagram langkah-langkah membuat sebuah program
  1. Pertama kita harus menggunakan sebuah editor untuk mengetik program. Banyak program editor atau pemrosesan kata yang tersedia untuk digunakan dalam membuat dan/atau mengedit sebuah program. Editor yang banyak digunakan adalah program MS-DOS EDIT (atau Notepad pada Windows), dimana tersedia dalam semua sistem operasi microsoft. Perlu diperhatikan bahwa editor harus mampu menghasilkan file ASCII. Bagi kebanyakan assembler, nama file biasanya mengikuti konvesi DOS, namun file sumber memiliki ekstensi "asm" atau "src" tergantuk dari assembler yang anda gunakan. Periksa assembler anda untuk konvesi ini. Ekstensi "asm" pada file sumber digunakan oleh assembler untuk langkah berikutnya. Ada beberapa editor yang dirancang khusus untuk menulis program bahasa assembly 8051, salah satunya adalah MIDE-51 keluaran OpCUBE. Editor ini menurut saya sudah cukup baik karena telah dilengkapi oleh syntax highlighter yang dapat memudahkan kita dalam menulis sebuah program.
  2. File sumber "asm" yang berisi kode program yang dibuat pada langkah pertama kemudian  diserahkan ke assembler 8051. Assembler akan mengubah instruksi-intruksi dalam file tersebut kedalam kode mesin. Assembler akan menghasilkan file objek dan file list. Ekstensi untuk file objek adalah "obj", sedangkan ekstensi untuk file list adalah "lst". Sebagai pilihan, anda dapat menggunakan program assembler ASEM-51 buatan W.W.Heinz atau ASM51 buatan intel.
  3. Assembler memerlukan langkah ketiga yang disebut linking. Program link mengambil satu atau lebih file objek dan akan menghasilkan file objek absolut dengan ekstensi "abs". Umumnya file abs ini digunakan untuk latihan, jika kita memiliki program monitor.
  4. Selanjutnya, file "abs" dimasukkan ke dalam program yang disebut "OH" (konverter dari objek ke hex), dimana akan menghasilkan sebuah file berekstensi "hex" yang siap untuk di-burn ke dalam ROM. Program ini terdapat pada semua assembler 8051. Program assembler yang berbasiskan windows dimasa sekarang telah menggabungkan langkah 2 sampai 4 menjadi satu langkah saja.

Lebih Jauh Tentang File "asm" dan "obj"

File "asm" dapat disebut juga sebagai file source (sumber), dan untuk alasan inilah beberapa assembler juga mendukung extensi "src". Periksa assembler 8051 anda untuk melihat ekstensi yang dibutuhkan. Seperti yang disebutkan sebelumnya, file ini dibuat dengan editor seperti DOS EDIT, Windows Notepad, atau editor lainnnya. Assembler 8051 mengubah file asm intruksi bahasa assembly tersebut ke bahasa mesin dan menghasilkan file obj (object). Selain membuat file objek, assembler juga menghasilkan file lst (file list).

File List "lst"

File Lst (List) adalah tambahan, namun bagaimanapun juga file tersebut sangat penting karena file tersebut mendaftar setiap opcode yang telah dibuat oleh assembler, termasuk alamat-alamatnya, dan termasuk pemberitahuan jika ada kesalahan dalam penulisan program. Beberapa Assembler tidak otomatis mebuatkan file lst tersebut untuk kita, dan membutuhkan perintah tambahan dalam DOS Command Promt saat menjalankan assembler yang bersangkutan. Namun untuk program assembler ASM51 buatan Intel atau ASEM-51 buatan W.W.Heinz sudah otomatis membuatkan file lst ini. File tersebut sangat penting bagi programer untuk melihat setiap baris syntax yang dituliskan apa sudah benar atau tidak. Termasuk dapat melihat alamat setiap opcode dengan jelas. Dibawah ini merupakan contoh file lst dari sebuah program.
0000               ORG   0H       ;Mulai program di alamat 0
0000  7D25         MOV   R5,#25H  ;Isikan 25H ke dalam R5
0002  7F34         MOV   R7,#34H  ;Isikan 34H ke dalam R7
0004  7400         MOV   A,#0     ;Isikan 0 ke dalam A
0006  2D           ADD   A,R5     ;Jumlahkan isi R5 dengan A (A=A+R5)
0007  2F           ADD   A,R7     ;Jumlahkan isi R7 dengan A (A=A+R7)
0008  2412         ADD   A,#12KH  ;Jumlahkan A dengan 12H (A=A+12H)
000A  80FE  HERE:  SJMP  HERE     ;Program berputar disini
000C               END            ;Akhir dari file sumber

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Pengantar Pemrograman Assembly MCS-51

| | Tidak ada komentar
Selain CPU hanya dapat bekerja dalam biner, CPU juga dapat melakukannya dengan kecepatan yang sangat tinggi. Bagi manusia, menangani bilangan 0 dan 1 untuk memrogram komputer adalah suatu hal yang membosankan dan juga lambat. Sebuah program yang hanya terdiri dari bilangan 0 dan 1 disebut bahasa mesin. Pada komputer terdahulu, programer menulis program dalam bahasa mesin. Walaupun bilangan heksadesimal digunakan sebagai cara untuk mengefisienkan dalam mepresentasikan bilangan biner, namun proses kerja dalam kode mesin masih dianggap cukup rumit bagi manusia. Oleh karena itu, dikembangkan bahasa assembly yang berisi mnemonic untuk instruksi kode mesin, ditambah fitur-fitur lain yang membuat programer lebih cepat dan tidak rentan terhadap kesalahan saat membuat suatu program. Sekarang mnemonic digunakan secara luas dalam bidang ilmu pengetahuan, buku-buku tehnik yang merujuk pada kode dengan tujuan semuanya agar lebih mudah untuk diingat. Kode bahasa assembly diterjemahkan ke dalam bahasa mesin oleh sebuah program yang disebut assembler. Bahasa assembly juga dikenal sebagai bahasa tingkat rendah (low-level languages) karena bahasa ini yang paling berhubungan langsung dengan struktur CPU. Dalam memprogram bahasa assembly, programer diharuskan benar-benar mengenal semua register dalam CPU, ukuran dari setiap register tersebut, serta berbagai detil lainnya.

Dimasa sekarang, seseorang dapat menggunakan berbagai bahasa yang jauh lebih memudahkan, misalnya seperti BASIC, Pascal, C, C++, Java , dan masih banyak lagi. Bahasa-bahasa tersebut disebut sebagai bahasa tingkat tinggi (high-level languages) karena programer tidak perlu mengenal lebih jauh tentang isi dari struktur CPU target. Sementara assembler digunakan untuk menerjemahkan program yang berbahasa assembly ke dalam kode mesin (terkadang disebut object code atau opcode untuk operation code), bahasa tingkat tinggi diterjemahkan ke dalam kode mesin oleh program yang bernama compiler. Misalnya kita menulis program dalam bahasa C, maka kita harus menggunakan compiler C untuk menerjemahkan program tersebut ke dalam bahasa mesin. Namun untuk sekarang, kita cukup berkonsentrasi hanya pada bahasa assembly 8051 saja.

Struktur Bahasa Assembly

Program berbahasa assembly terdiri dari beberapa bagian. Setiap intsruksinya diungkapkan dalam satu baris kode. Setiap instruksi terdiri dari satu mnemonic, terkadang diikuti oleh satu atau dua operand. Operand adalah data yang ingin dimanipulasi, dan mnemonic yang memerintahkan CPU untuk melakukan sesuatu terhadap operand tersebut.

      ORG  0H      ;Mulai program di alamat 0
      MOV  R5,#25H ;Isikan 25h ke dalam R5
      MOV  R7,#34H ;Isikan 34h ke dalam R7
      MOV  A,#0    ;Isikan 0 ke dalam A
      ADD  A,R5    ;Tambahkan isi R5 ke dalam A
                   ;sehingga A = A + R5
      ADD  A,R7    ;Tambahkan isi R7 ke dalam A
                   ;sekarang A = A + R5
      ADD  A,#12H  ;Tambahkan 12h ke dalam A
                   ;sekarang A = A + 12h
HERE: SJMP HERE    ;Berputar di sini
      END          ;Akhir dari program asm

Program berbahasa assembly di atas merupakan statement atau baris yang berurutan, di mana terdiri dari instruksi assembly seperti ADD dan MOV, dan beberapa statement lain yang disebut directive. Setiap instruksi memerintahkan CPU untuk melakukan suatu hal, sedang directive (juga disebut psuedo-instruction) memberikan arahan kepada assembler. sebagai contoh, intstruksi MOV dan ADD adalah sebuah perintah bagi CPU, sedang ORG dan END adalah directive (petunjuk arahan) bagi assembler. ORG pada contoh diatas mengatakan kepada assembler untuk menempatkan opcode selanjutnya pada alamat 0 di dalam memori, sementara END adalah untuk memberitahukan assembler akhir dari program dan mengabaikan setiap text di bawah END.

Pada dasarnya setiap instruksi bahasa assembly terdiri dari empat bagian, yaitu:

[label:]   mnemonic   [operands]   [; komentar]

Tanda kurung diatas menunjukkan bahwa bagian tersebut adalah opsional dan tidak semua baris memiliki bagian tersebut. Tanda kurung tidak dimasukkan dalam kode sebenarnya. Mengenai format diatas, berikut ini adalah hal-hal yang harus diperhatikan:
  1. Label dipakai untuk memberi nama pada sebuah baris perintah agar lebih mudah menyebutnya dalam penulisan program. Dalam sebuah program, tidak boleh ada label yang sama. Label bisa ditulis apa saja asalkan diawali dengan huruf, biasanya memiliki panjang tidak lebih dari 16 digit dan diakhiri dengan tanda titik dua “:” (Periksa assembler yang anda gunakan untuk aturan lebih jelasnya).
  2. Bagian mnemonic dan operand dalam bahasa assembly merupakan bagian utama dari kode program. Statement dalam bahasa assembly misalnya adalah:
          ADD A,B
          MOV A,#67
    
    ADD dan MOV adalah mnemonic yang akan menghasilkan opcode. Sedang "A,B" dan A,#67" adalah operand dari mnemonic tersebut. Di luar kedua bagian ini, yakni mnumonic dan operand disebut sebagai instruksi-psuedo atau directive. Ingat bahwa sebuah directive tidak akan menghasilkan kode mesin (opcode), dan mereka digunakan oleh assembler saat memutuskan bagaimana caranya untuk menterjemahkan mnemonic dan operand yang ada di setelah directive tersebut ke dalam kode mesin yang benar sesuai dengan keinginan programer. Dalam program diatas, perintah ORG (origin) dan END adalah contoh dari directive (beberapa assembler menggunakan syntax .ORG dan .END). Periksa assembler anda untuk penjelasan lebih jauh.
  3. Bagian komentar merupakan catatan penulis program. Meskipun bagian ini tidak mutlak diperlukan tapi sangat membantu dalam masalah dokumentasi. Sebuah baris perintah dapat dengan mudah dimengerti maksud dan tujuannya dengan hanya membaca bagian komentarnya. hal ini sangat membantu orang lain yang membaca program anda. Pemisah bagian komentar dengan bagian sebelumnya adalah tanda spasi atau tabulator, meskipun demikian huruf pertama dari komentar harus berupa tanda titik-koma ";". Bagian komentar diabaikan oleh assembler, dengan kata lain tidak akan diterjemahkan kedalam bahasa mesin.

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Bagian Dalam Mikrokontroler MCS-51

| | Tidak ada komentar
Pada artikel ini akan dijelaskan beberapa register dari mikrokontroler keluarga MCS-51 atau 8051 yang paling sering digunakan dan mengilustrasikan kegunaannya pada instruksi MOV dan ADD.

Register

Dalam CPU, register digunakan untuk menyimpan informasi secara sementara. Informasi tersebut dapat berupa sebuah byte data yang hendak diproses atau sebuah data alamat yang menunjuk pada suatu data lainnya. Register-register pada 8051 pada umumnya berupa register 8-bit. Dalam 8051 hanya ada satu tipe data, yaitu 8-bit. Register 8-bit tersebut ditunjukkan pada gambar dibawah ini mulai dari MSB (Most Significant Bit) D7 sampai LSB (Least Significant bit) D0. Dengan tipe data 8-bit tersebut, setiap data yang memiliki lebar lebih dari 8-bit harus dipecah menjadi beberapa bagian data 8-bit sebelum dapat diproses oleh CPU. Karena dalam mikrokontroler 8051 memiliki banyak register, maka pada artikel kali ini hanya akan membahas beberapa register yang paling sering digunakan saja.

Gambar register 8-bit
D7 D6 D5 D4 D3 D2 D1 D0

Register yang paling banyak digunakan adalah A (Accumulator), B, R0, R1, R2, R3, R4, R5, R6, R7, DPTR (DataPointer), dan PC (Program Counter). Semua register tersebut merupakan register 8-bit kecuali DPTR dan PC. Akumulator atau register A, digunakan dalam semua instruksi aritmatika dan logika. Untuk lebih memahami penggunaan dari register-register tersebut, kita dapat melihatnya dalam konteks dari dua buah instruksi sederhana, MOV dan ADD.

Gambar beberapa register 8-bit dan 16-bit pada 8051
Gambar beberapa register 8-bit dan 16-bit pada 8051

Instruksi MOV

Secara sederhana, instruksi MOV adalah menyalin isi data dari register satu ke register lainnya, dengan format sebagai berikut:

MOV   destination, source   ;Menyalin isi operand source ke operand destination

Instruksi ini memerintahkan CPU untuk memindahkan (sebenarnya adalah menyalin) operand source ke operand destination.Sebagai contoh, "MOV A,R0" adalah menyalin isi register R0 ke register A. Setelah instruksi ini dijalankan isi dari kedua register tersebut akan bernilai sama. Instruksi MOV tidak mengubah isi dari operand source. Program berikut ini adalah contoh untuk mengubah isi akumulator menjadi 55h (h adalah hex), lalu kemudian memindahkan nilainya kedalam beberapa register dalam CPU. Perhatikan tanda "#" dalam instruksi tersebut. Tanda tersebut mengindikasikan bahwa simbol setelahnya adalah sebuah nilai.

      MOV  A,#55H  ;Isi A dengan nilai 55H
      MOV  R0,A    ;Salin isi A ke dalam R0
                   ;(sekarang A=R0=55H)
      MOV  R1,A    ;Salin isi A ke dalam R1
                   ;(sekarang A=R0=R1=55H)
      MOV  R2,A    ;Salin isi A ke dalam R2
                   ;(sekarang A=R0=Rl=R2=55H)
      MOV  R3,#95H ;Isi R3 dengan nilai 95H
                   ;(sekarang R3=95H)
      MOV  A,R3    ;Salin isi R3 ke dalam A
                   ;(sekarang A=R3=95H)

Saat menulis program untuk mikrokontroller 8051, hal-hal yang harus diperhatikan adalah sebagai berikut:
  1. Sebuah nilai dapat langsung diberikan pada register-register seperti register A, B, atau R0 s/d R7. Namun bagaimanapun juga untuk mengindikasikan bahwa sebuah simbol adalah sebuah nilai dan bukan sebagai alamat atau yang lainnya, maka sebelum nilai tersebut harus diberi tanda pound atau pagar atau "#".
          MOV  A,#23h   ;Mengisi A dengan nilai 23h
          MOV  R0,#12h  ;Mengisi R0 dengan nilai 12h
          MOV  R1#1Fh  ;Mengisi R1 dengan nilai 1Fh
          MOV  R2,#2Bh  ;Mengisi R2 dengan nilai 2Bh
          MOV  B,#3Ch   ;Mengisi B dengan nilai 3Ch
          MOV  R7,#9Dh  ;Mengisi R7 denga nilai 9Dh
          MOV  R6,#0F9h ;Mengisi R6 denga nilai F9h
          MOV  R5,#12   ;Mengisi R5 denga nilai 12 desimal
    
    Perhatikan pada instruksi "MOV R6,#0F9h", bilangan 0 antara # dan F digunakan untuk mengindikasikan bahwa F merupakan bilangan heksa dan bukan merupakan sebuah huruf. Dengan kata lain"MOV R6,#F9h" akan menyebabkan sebuah error.
  2. Jika nilai 0 s/d F kita isikan pada sebuah register 8-bit, maka hanya akan mengubah 4-bit terkecil dari register tersebut, sedangkan 4-bit teratas dari register tersebut akan bernilai 0. Misalnya dengan instruksi "MOV A,#5", maka sejatinya instruksi tersebut sama dengan "MOV A,#05h", sehingga akan menghasilkan A = 05h. Dan dalam bilangan biner adalah A = 00000101.
  3. Mengisikan sebuah nilai yang terlalu besar ke register (lebih besar dari yang sanggup ditampung oleh register yang bersangkutan) akan menghasilkan error.
          MOV  A,#7F2h  ; 7F2h > (8-bit atau FFh atau 255 desimal)
          MOV  R2,#456  ; 456d > (8-bit atau FFh atau 255 desimal)
    
  4. Untuk mengisikan nilai ke dalam sebuah register, kita harus mengimbuhkan simbol pound (#). Jika tidak ada simbol tersebut, maka assembler akan menganggapnya sebagai sebuah alamat memori. Sebagai contoh, "MOV A,17h" yang berarti pindahkan isi nilai dari alamat 17h ke dalam A. Jika kita ingin mengisi register A dengan nilai 17h, maka kita harus menuliskannya dengan instruksi "MOV A,#17h". Tidak adanya simbol pagar tersebut tidak akan membuat assembler menghasilkan pesan error, namun bisa jadi assembler akan membuatkan kode yang bukan seperti kemauan kita.

Instruksi ADD

Instruksi ADD memiliki format sebagai berikut:

ADD   A, source   ;Jumlahkan source dengan akumulator

Instruksi ADD akan mengatakan kepada CPU untuk menjumlahkan byte source dengan isi register A dan menempatkan hasilnya didalam register A. Untuk menjumlahkan dua buah bilangan seperti 25H dan 34H, masing-masing bilangan tersebut dapat dipindahkan ke sebuah register terlebih dahulu dan kemudian keduanya dijumlahkan.
      MOV  A,#25h   ;Isi A dengan nilai 25h
      MOV  R2,#34h  ;Isi R2 dengan nilai 34h
      ADD  A,R2     ;Tambahakan keduanya
                    ;Jadi A = A + R2
Menjalankan program di atas akan menghasilkan A = 59h (25h + 34h = 59h) dan nilai pada register R2 tidak akan berubah setelah instruksi ADD, yakni 34h. Sekali lagi operand source tidak akan berubah. Program di bawah ini adalah contoh program dengan cara yang lebih kompleks.
      MOV  R5,#25h  ;Isi R7 dengan nilai 25h
      MOV  R7,#34h  ;Isi R5 dengan nilai 34h
      MOV  A,#0     ;Isi A dengan nilai 0 (clear A)
      ADD  A,R5     ;Tambahakan A dengan isi R5
                    ;Jadi A = A + R5
      ADD  A,R7     ;Tambahakan A dengan isi R7
                    ;Jadi A = A + R7
Program di atas akan menghasilkan nilai 59h yang akan ditempatkan pada register A. Ada banyak jalan menuju Roma, namun sedapat mungkin kita mencari jalan yang paling singkat dan cepat. Dibawah ini adalah cara yang lebih cepatnya.
      MOV  A,#25h  ;Isi A dengan nilai 25h
      ADD  A,#34h  ;Tambahakan A dengan 34h
Dapat kita lihat dari berbagai contoh di atas bahwa operand tujuan selalu adalah A. Jika kita memaksa menuliskan kode seperti "ADD R2,A" tentu akan menghasilkan error. 8051 memang hanya mendukung operasi arimatika dan logika menggunakan A sebagai akumulatornya, dan dengan kata lain operasi tersebut dibatasi selebar 8-bit. Namun walaupun demikian, hal itu sudah lebih dari cukup untuk membuat program untuk berbagai aplikasi yang relatif canggih.

Kita tahu bahwa 8051 juga memiliki 2 buah register 16-bit, walaupun dirancang bukan untuk keperluan manipulasi data. Namun jika anda bertanya apakah CPU 8051 dapat memanipulasi data yang lebih besar dari 8-bit? Tentu saja, tidak ada hal yang tidak mungkin. Seperti yang sudah kita ketahui sebelumnya bahwa komputer 8-bit, idealnya hanya memproses data sampai selebar 8-bit. Dalam kasus tertentu beberapa perintah dalam 8051 dapat diurutkan untuk dapat menangani data yang lebih besar, seperti data 16-bit, 24-bit, maupun 32-bit. Semua bisa dilakukan. Tentu dengan memecah data tersebut dalam beberapa data 8-bit,dan kemudian memprosesnya satu-persatu kemudian menyatukan kembali data tersebut sehingga seperti hasil yang kita inginkan. Dalam prakteknya hal itu bisa dilakukan dengan membuat kode-kode yang rumit dan teliti.

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Kalkulator Konversi Antar Sistem Bilangan

| | 6 komentar
Kalkulator yang berbasiskan javascript dibawah ini dapat digunakan untuk mengkonversi sistem bilangan desimal ke heksadesimal, biner, oktal, sampai sistem bilangan dengan base-36 dan begitupun sebaliknya.

Sistem bilangan merupakan cara sistematis untuk mepresentasikan angka-angka dengan karakter simbolis dan menggunakan sebuah nilai base untuk mempermudah dalam pengelompokan dalam bentuk yang ringkas. Untuk lebih jelas mengenai penjelasan tentang sistem bilangan, dapat anda liat pada artikel Pengenalan Sistem Bilangan. Sedangkan untuk memahami cara konversi antar sistem bilangan, dapat anda lihat pada artikel Konversi Sistem Bilangan.

Selamat mencoba...

Bilangan desimal (base-10) = (digit antara 0 dan 9)
Bilangan heksadesimal (base-16) = (digit antara 0 dan F)
Sistem bilangan base- = (digit antara 0 dan 1)

Jika ada bugs, kritik, saran, ataupun pertanyaan... silahkan berkomentar... Terimakasih...

Kalkulator Rangkaian Pembagi Tegangan

| | Tidak ada komentar
Rangkaian pembagi teganganKalkulator yang berbasiskan javascript dibawah ini dapat digunakan untuk mencari nilai komponen yang tidak diketahui terkait dengan gambar rangkaian pembagi tegangan disamping.

Output "Vout" merupakan tegangan pada resistor R2. Misalnya, untuk menentukan besar nilai resistor yang dibutuhkan untuk menghasilkan Vout sebesar 5V dengan tegangan sumber 12V dan arusnya 1mA, nilai 12 dapat dimasukkan pada bagian "Tegangan Baterai", nilai .001 dibagian "arus", dan angka 5 dibagian "Vout". Hasil perhitungan harusnya adalah 7000 untuk R1 dan 5000 untuk R2.

Untuk mencari resistansi yang diperlukan untuk dihubung seri dengan LED 2V yang bekerja pada tegangan baterai 12V dengan arus 20mA, maka anda dapat memasukkan nilai 12 pada bagian "Tegangan Baterai", .02 pada bagian "Arus", dan angka 2 pada bagian "Vout". LED akan diwakili oleh R2. Setelah anda menekan tombol "Hitung", hasil untuk R1 seharusnya adalah 500 Ω.

Kalkulator ini juga dapat menyelesaikan masalah yang berhubungan dengan disipasi daya terkait dengan gambar rangkaian diatas. Misalnya, untuk mengetahui nilai resistansi yang dihubung seri dengan dioda zener 5.1V dengan tegangan supply 15V yang beroperasi pada 1/8 watt, nilai 0.125 dapat anda masukan pada bagian "Daya R2", nilai 5.1 pada bagian "Vout", dan angka 15 pada bagian "Tegangan Baterai". Setelah anda menekan tombol "Hitung", hasil yang diperoleh untuk nilai R1 harusnya adalah 404 Ω.

Sebelum melakukan perhitungan berikutnya, sebaiknya anda menekan tombol "Reset" terlebih dahulu. Selamat Mencoba....

Tegangan Baterai : Volt
Arus : Ampere
R1 : Ω
R2 : Ω
Vout : Volt
Daya R1 : Watt
Daya R2 : Watt

Jika ada bugs, kritik, saran, ataupun pertanyaan... silahkan berkomentar... Terimakasih...

Sistem Pengkodean Bilangan

| | Tidak ada komentar
Data yang diproses dalam sistem digital, mikrokontroler, maupun komputer digital umumnya dipresentasikan dengan menggunakan kode tertentu. Terdapat berbagai macam sistem kode seperti Binary-Coded Decimal (BCD), gray, excess-3, kode 7-segment display, dan kode alfanumerik (ASCII dan EBCDIC). Jika penyajian data hanya menggunakan sistem bilangan, maka penyajian tersebut sangat terbatas, yakni hanya dapat menyajikan data dalam bentuk bilangan positif saja. Dengan menggunakan sistem pengkodean, dapat disajikan berbagai macam jenis data seperti bilangan, simbol, maupun huruf ke dalam besaran digital. Selain itu, dengan sistem pengkodean juga dapat disajikan bilangan positif maupun bilangan negatif dan bahkan bilangan pecahan dengan titik desimal.

Kode-kode tersebut disusun dengan suatu cara menggunakan bilangan biner yang membentuk kelompok tertentu. Kelompok bilangan biner yang membentuk suatu kode dibedakan penyebutnya. Kode biner 4-bit dinamakan nibble, contoh: 11012, 10102, dan 10012. Kode biner 8-bit dinamakan byte, contoh: 100111002 dan 101010102. Dalam hal ini, 1 byte = 8-bit, 1 KiloByte = 1KB = 1024 byte = 210 byte. Kode biner 16-bit dinamakan word, contoh: 10011100101010102. Dan kode biner 32-bit dinamakan double word.

Kode BCD (Binary-Coded Decimal)

Kode BCD atau bilangan desimal yang dikodekan kedalam bilangan biner, sering ditulis dalam bentuk BCD-8421 menggunakan kode biner 4-bit untuk mempresentasikan masing-masing digit desimal dari suatu bilangan.

Dalam sistem kode BCD, terdapat 6 buah kode yang tidak dapat digunakan (invalid code), yakni: 10102, 10112, 11002, 11012, 11102, 11112. Sehingga hanya ada 10 kode BCD yang valid, yakni kode-kode untuk merepresentasikan bilangan desimal dari 0 sampai dengan 9. Untuk lebih memahami kode BCD, coba perhatikan contoh konversi berikut ini.

Contoh:
① Konversi bilangan desimal 105,37510 ke bentuk kode BCD
1 0 5 , 3 7 5
0001 0000 0101 , 0011 0111 0101
105,37510 = 100000101,001101110101BCD

② Konversi kode BCD 100000101,001101110101BCD ke bentuk bilangan desimal
0001 0000 0101 , 0011 0111 0101
1 0 5 , 3 7 5
100000101,001101110101BCD = 105,37510

Walaupun kode BCD nampak seperti sistem bilangan biner, namun keduanya berbeda, karena BCD merupakan sistem pengkodean, sedangkan biner adalah sistem bilangan.

Kode Excess-3 (XS-3)

Sistem pengkodean lain yang mirip dengan BCD adalah Excess-3. Untuk menyusun kode XS-3 dari suatu bilangan desimal, masing-masing digit dari suatu bilangan desimal yang akan dikodekan dengan XS-3, ditambah dengan bilangan desimal 3, kemudian hasilnya dikonversi seperti cara pada konversi BCD.

Pada XS-3, terdapat 6 kode yang tidak dapat digunakan, yakni: 00002, 00012, 00102, 11012, 11102, 11112. Untuk lebih jelasnya, silahkan perhatikan contoh berikut ini.

Contoh:
① Konversi bilangan desimal 1210 ke bentuk kode XS-3
 2   → Sistem bilangan desimal
  3 +     3 +
4 5
0100 0101   → Sistem kode XS-3
1210 = 01000101XS-3

② Konversi kode BCD 100111000101XS-3 ke bentuk bilangan desimal
1001 1100 0101   → Sistem kode XS-3
9 12 5
  3      3    3
6   9 2   → Sistem bilangan desimal
100111000101XS-3 = 69210

Kode Gray

Kode gray memiliki keunikan, yakni setiap kali kode itu berubah nilainya secara berurutan misalnya dari 2 ke 3 atau dari 5 ke 6, hanya terdapat 1-bit saja yang berubah. Contoh: jika nilai kode gray berubah dari 2 ke 3, maka kode gray berubah dari 0011GRAY ke 0010GRAY. Kode gray biasanya digunakan sebagai data yang menunjukkan posisi dari suatu poros mesin yang berputar.

Contoh:
① Konversi bilangan desimal 1310 ke kode gray
1310 = 11012                              → Konversi desimal ke biner
1 → + → 1 → + → 0 → + → 1   → Sistem bilangan biner



  → Carry hasil penjumlahan diabaikan
1 0
1
1
  → Sistem kode gray
1310 = 1011GRAY

② Konversi kode gray 1011GRAY ke bentuk bilangan desimal
1    0    1    1   → Sistem kode gray
↓    ↓    ↓      → Carry hasil penjumlahan diabaikan
1 + 1 + 0 + 1   → Sistem bilangan biner
11012 = 1310                 → Konversi biner ke desimal

1011GRAY = 1310

Kode 7-Segment Display

Hasil pemrosesan sinyal dari suatu rangkaian digital merupakan sinyal digital dalam bentuk kode-kode biner. Jika hasil tersebut tetap disajikan dalam bentuk aslinya yakni kode biner, maka kita akan mengalami kesulitan dalam membacanya karena kita tidak terbiasa menggunakan kode biner dalam kehidupan sehari-hari. Kebiasaan kita adalah menggunakan sajian bilangan dalam bentuk bilangan desimal. Agar menjadi mudah dibaca, maka kode-kode biner tersebut perlu diubah tampilannya menggunakan tampilan desimal. Piranti yang digunakan untuk menampilkan data dalam bentuk desimal adalah LED 7-Segment Display. Untuk menampilkan bilangan desimal, display ini memerlukan penggerak berbentuk kode-kode biner. Bentuk display 7-segment ditunjukkan pada gambar dibawah ini.

7-segment display
7-segment display

Setiap segment dari tampilan tersebut berupa LED yang susunannya membentuk suatu konfigurasi tertentu. Gambar (a) menunjukkan wujud dari 7-segment display dilihat dari atas, sedangkan gambar (b) menunjukkan segmen-segmen peraga 7-segment jenis common cathode. Pada jenis ini, diperlukan sinyal high (1) untuk menyalakan setiap segmennya. Pada gambar (c) ditunjukkan segmen-segmen peraga 7-segment jenis common anode, dimana diperlukan sinyal low (0) untuk menyalakan setiap segmennya.

1 byte dapat mengkodekan keadaan penuh sebuah 7-segment display. Pengkodean bit yang paling populer adalah gfedcba dan abcdefg, dimana pada kedua pengkodean tersebut biasanya menganggap 0 adalah off dan 1 adalah on.

Tabel pengkodean heksa untuk menampilkan 0 s/d F
Digit gfedcba abcdefg a b c d e f g
0 0x3F 0x7F on on on on on on off
1 0x06 0x30 off on on off off off off
2 0x5B 0x6D on on off on on off on
3 0x4F 0x79 on on on on off off on
4 0x66 0x33 off on on off off on on
5 0x6D 0x5B on off on on off on on
6 0x7D 0x5F on off on on on on on
7 0x07 0x70 on on on off off off off
8 0x7F 0x7F on on on on on on on
9 0x6F 0x7B on on on on off on on
A 0x77 0x77 on on on off on on on
b 0x7C 0x1F off off on on on on on
C 0x39 0x4E on off off on on on off
d 0x5E 0x3D off on on on on off on
E 0x79 0x4F on off off on on on on
F 0x71 0x47 on off off off on on on

Agar setiap segmen beroperasi dengan benar, maka setiap segmen membutuhkan tegangan setidaknya 2 volt, dan arus 5 mA. Jika kita memiliki sumber tegangan DC 5 volt (Vcc = 5 volt), maka nilai resistor disetiap segmennya adalah:

  R = (Vcc - 2 volt)/5 mA = 600 Ω  → Menggunakan resistor 680 Ω akan bekerja baik.

Kode Alfanumerik (ASCII dan EBCDIC)

Dalam penggunaan komputer secara umum, walaupun kode yang diolah dalam komputer itu sendiri adalah bilangan biner, tetapi selain bilangan desimal juga diproses huruf dan tanda baca/tanda khusus lainnya. Untuk memroses data seperti ini, tentunya diperlukan sistem pengkodean yang lebih luas dari pada sistem-sistem pengkodean yang telah dibahas sebelumnya. Kode ini disebut kode "Alphanumeric" dan sering disingkat dengan nama "Alphameric". Dua jenis kode alfanumerik yang paling umum dipakai dalam dunia komputer sekarang ini adalah: ASCII (American Standard Code for Information Interchange) dan EBCDIC (Extended Binary Coded Decimal Interchange Code).

ASCII terdiri atas 7-bit bilangan biner yang dapat mengkodekan semua angka desimal, huruf abjad (baik huruf besar maupun kecil), tanda-tanda khusus dan tanda baca, dan beberapa kode kendali/kontrol yang umum dipakai dalam komunikasi data. Dalam prakteknya, walaupun kode ASCII terdiri dari 7-bit, kebanyakan kode ASCII menggunakan 8-bit dengan 1-bit tambahan yang dipakai sebagai bit parity. Sistem kode EBCDIC terdiri atas 8-bit, digunakan dalam komputer-komputer IBM tipe 360 dan 370.

Pada tabel dibawah ini akan ditunjukkan kedua jenis kode alfanumerik yang disebut di atas. Dalam EBCDIC, untuk 4-bit paling kiri, angka dinyatakan dengan 11112 (F16), huruf kapital dinyatakan dengan C16 sampai E16, dan untuk huruf kecil dinyatakan dengan bilangan heksadesimal 8 sampai A, sedangkan untuk tanda lainnya dinyatakan dengan 01xx2, dengan x dapat berarti 0 atau 1. Dalam ASCII, karakter dengan kode dibawah 2016 digunakan sebagai kode kendali komunikasi, angka dikodekan dengan 3016 sampai 3916, huruf kapital dikodekan dengan 4116 sampai 5A16, huruf kecil dikodekan dengan 6116 sampai 7A16, dan kode yang lainnya digunakan untuk tanda-tanda baca. Dengan demikian, sudah jelas bahwa kode ASCII lebih mudah untuk diingat.

Tabel ASCII (American Standard Code for Information Interchange)
Tabel ASCII (American Standard Code for Information Interchange)
Tabel EBCDIC (Extended Binary Coded Decimal Interchange Code)
Tabel EBCDIC (Extended Binary Coded Decimal Interchange Code)

Operasi Perhitungan Pada Sistem Bilangan

| | 17 komentar
Pada artikel ini akan dibahas tentang operasi perhitungan yang terdiri dari operasi penjumlahan, pengurangan, perkalian, dan pembagian dari sistem bilangan biner, oktal, dan heksadesimal. Pada artikel yang lalu telah dijelaskan tentang metode komplemen bilangan dimana hal tersebut sangat berguna untuk diterapkan pada operasi perhitungan ini, karena komputer digital tidak mengenal bilangan negatif.

Operasi Penjumlahan

1. Penjumlahan sistem bilangan biner
Aturan dasar dari penjumlahan biner adalah sebagai berikut:
  0 + 0 = 0
  0 + 1 = 1
  1 + 0 = 1
  1 + 1 = 10

Dengan aturan tersebut, kita dapat menjumlahkan bilangan biner seperti penjumlahan bilangan desimal (dilakukan dari kanan ke kiri). Lebih jelasnya dapat dilihat seperti beberapa contoh di bawah ini.

Contoh:
Berapakah 11010,12 + 10111,02 Berapakah 1011,11012 + 11011,111012
    111
    11010,1
    10111,0 +
  110001,1

 11010,12 + 10111,02 = 110001,12
    1  111 1
      1011,1101
    11011,11101 +
  100111,10111

 11010,12 + 10111,02 = 100111,101112

2. Penjumlahan istem bilangan oktal
Aturan dasar dari penjumlahan biner adalah sebagai berikut:
  0 + 0 = 0              0 + 5 = 5              1 + 3 = 4              3 + 5 = 10
  0 + 1 = 1              0 + 6 = 6              1 + 5 = 6              4 + 5 = 11
  0 + 2 = 2              0 + 7 = 7              1 + 7 = 10            4 + 6 = 12 
  0 + 3 = 3              1 + 1 = 2              2 + 6 = 10            Dst…
  0 + 4 = 4              1 + 2 = 3              2 + 7 = 11             

Dengan dasar ini, penjumlahan oktal sama halnya dengan penjumlahan bilangan desimal. Lebih jelasnya depat dilihat pada beberapa contoh berikut ini.

Contoh:
Berapakah 1258 + 468 Berapakah 4248 + 25678

      1
    125
      46 +
    173

 1258 + 4681738

    111
      424
    2567 +
    3213

 4248 + 25678 = 32138

3. Penjumlahan sistem bilangan heksadesimal
Operasi penjumlahan heksadesimal sama halnya seperti penjumlahan pada desimal. Lebih jelasnya depat dilihat pada beberapa contoh berikut ini.

Contoh:
Berapakah 2B516 + 7CA16 Berapakah 658A16 + 7E616

    1
    2B5
    7CA +
    A7F

 2B516 + 7CA16 = A7F16

      11
    658A
      7E6 +
    6D60

 658A16 + 7E616 = 6D6016

Operasi Pengurangan

1. Pengurangan sistem bilangan biner
Pengurangan pada sistem bilangan biner diterapkan dengan cara pengurangan komplemen 1 dan pengurangan komplemen 2 dimana cara inilah yang digunakan oleh komputer digital.

a. Pengurangan biner menggunakan komplemen 1
Bilangan biner yang akan dikurangi dibuat tetap dan bilangan biner sebagai pengurangnya diubah ke bentuk komplemen 1, kemudian dijumlahkan. Jika dari penjumlahan tersebut ada bawaan putaran ujung (end-around carry), maka bawaan tersebut ditambahkan untuk mendapatkan hasil akhir. Lebih jelasnya dapat dilihat seperti contoh di bawah ini.

Contoh:
Berapakah 10112 – 01112

    1011     → Bilangan biner yang dikurangi
    1000 +  → Komplemen 1 dari bilangan pengurangnya (01112)
  10011
  ↳ end-around carry
    0011     → Hasil penjumlahan tanpa end-around carry
         1 +  → end-around carry dari hasil penjumlahan
    0100  

10112 – 01112 = 01002

Berapakah 111102 – 100012

    11110     → Bilangan biner yang dikurangi
    01110 +  → Komplemen 1 dari 100012
  101100
  ↳ end-around carry
    01100     → Hasil penjumlahan tanpa end-around carry
           1 +  → end-around carry dari hasil penjumlahan
    01101  

111102 – 100012 = 011012

Jika dari penjumlahan tersebut tidak terdapat bawaan putaran ujung, maka hasil penjumlahan bilangan yang dikurangi dengan komplemen 1 bilangan pengurangnya adalah bilangan negatif dimana hasil akhirnya negatif dari hasil komplemen 1 penjumlahan tadi. Lebih jelasnya dapat dilihat beberapa contoh di bawah ini.

Contoh:
Berapakah 011102 – 111102

    01110     → Bilangan biner yang dikurangi
    00001 +  → Komplemen 1 dari 111102
    01111
karena tidak ada end-around carry,
maka hasilnya adalah bilangan negatif (komplemen 1 dari 011112)

011102 – 111102 = – 100002

Berapakah 010112 – 100012

    01011     → Bilangan biner yang dikurangi
    01110 +  → Komplemen 1 dari 100012
    11001     
karena tidak ada end-around carry,
maka hasilnya adalah bilangan negatif (komplemen 1 dari 110012)

010112 – 100012 = – 001102

b. Pengurangan biner menggunakan komplemen 2
Bilangan biner yang dikurangi tetap kemudian bilangan biner sebagai pengurangnya di komplemen 2, lalu dijumlahkan. Jika hasilnya ada bawaan (carry), maka hasil akhir adalah hasil penjumlahan tersebut tanpa carry (diabaikan). Lebih jelasnya dapat dilihat beberapa contoh di bawah ini.

Contoh:
Berapakah 11002 – 00112

    1100     → Bilangan biner yang dikurangi
    1101 +  → Komplemen 2 dari 00112
  11001     → Carry diabaikan

11002 – 00112 = 10012

Berapakah 1100002 – 0111102

    110000     → Bilangan biner yang dikurangi
    100001 +  → Komplemen 2 dari 0111102
  1010001     → Carry diabaikan

1100002 – 0111102 = 0100012

Sekarang bagaimana kalau hasil penjumlahan dari bilangan yang dikurangi dengan komplemen 2 bilangan pengurangnya tanpa bawaan? Untuk menjawab ini, maka caranya sama seperti pengurangan komplemen 1, dimana hasil akhirnya negatif dan hasil penjumlahan tersebut di komplemen 2 merupakan hasil akhirnya. Lebih jelasnya dapat dilihat seperti contoh di bawah ini.

Contoh:
Berapakah 011112 – 100112

    01111     → Bilangan biner yang dikurangi
    01101 +  → Komplemen 2 dari 100112
    11100
Karena tidak ada carry,
maka hasilnya adalah bilangan negatif (komplemen 2 dari 111002)

011112 – 100112– 001002

Berapakah 100112 – 110012

    10011     → Bilangan biner yang dikurangi
    00111 +  → Komplemen 2 dari 110012
    11010
Karena tidak ada carry,
maka hasilnya adalah bilangan negatif (komplemen 2 dari 110102)

100112 – 110012– 001102

2. Pengurangan sistem bilangan oktal dan heksadesimal
Untuk pengurangan bilangan oktal dan heksadesimal, polanya sama dengan pengurangan bilangan desimal. Untuk lebih jelasnya lihat contoh di bawah ini.

Contoh untuk bilangan oktal:
Berapakah 1258 – 678 Berapakah 13218 – 6578

      78      borrow
    125
      67  –
      36

 1258 – 678 = 368

      778      borrow
    1321
      657  –
      442

 13218 – 6578 = 4428

Contoh untuk bilangan heksadesimal:
Berapakah 125616 – 47916 Berapakah 324216 – 198716

      FF10      borrow
    1256
      479  –
    DDD

 125616 – 47916 = DDD16

      FF10      borrow
    3242
    1987  –
    18CA

 324216 – 198716 = 18CA16

Operasi Perkalian

1. Perkalian sistem bilangan biner
Perkalian biner dapat juga dilakukan seperti perkalian desimal, bahkan jauh lebih mudah karena pada perkalian biner hanya berlaku empat hal, yaitu :
  0 × 0 = 0
  0 × 1 = 0
  1 × 0 = 0
  1 × 1 = 1

Untuk lebih jelasnya dapat dilihat seperti beberapa contoh di bawah ini.

Contoh:
Berapakah 10112 × 10012 Berapakah 101102 × 1012
        1011    → Multiplikan (MD)
        1001 × → Multiplikator (MR)
        1011      
      0000
    1011
  1011       +
  1100011

10112 × 10012 = 11000112

        10110    → Multiplikan (MD)
            101 × → Multiplikator (MR)
        10110      
      00000
    10110     +
    1101110

101102 × 1012 = 11011102


2. Perkalian sistem bilangan oktal dan heksadesimal
Untuk perkalian bilangan oktal dan heksadesimal, lebih jelasnya dapat diperhatikan caranya seperti beberapa contoh berikut ini.

Contoh untuk bilangan oktal:
Berapakah 258 × 148 Berapakah 4538 × 658

      25
      14 ×
    124
    25   +
    374

258 × 148 = 3748

      453
        65 ×
    2727
  3402   +
  36747

4538 × 658 = 367478

Contoh untuk bilangan heksadesimal:
Berapakah 52716 × 7416 Berapakah 1A516 × 2F16

        527
          74  ×
      149C
    2411    +
    255AC

52716 × 7416 = 255AC16

    1A5
      2F  ×
  18AB
  34A    +
  4D4B

1A516 × 2F16 = 4D4B16

Operasi Pembagian

1. Pembagian sistem bilangan biner
Untuk pembagian bilangan biner tak ubahnya seperti pada pola pembagian bilangan desimal. Lebih jelasnya dapat dilihat caranya seperti beberapa contoh berikut ini:

Contoh:
Berapakah 11000112 ÷ 10112 Berapakah 11011102 ÷ 101102

1011√1100011 = 1001
          1011
                10
                  0
                101
                    0
                1011
                1011
                      0

11000112 ÷ 10112 = 10012

10110√1101110 = 101
            10110
                1011
                      0
                10110
                10110
                        0

11011102 ÷ 101102 = 1012



2. Pembagian sistem bilangan oktal dan heksadesimal
Untuk pembagian bilangan oktal dan heksadesimal, lebih jelasnya dapat diperhatikan caranya seperti beberapa contoh berikut ini.

Contoh untuk bilangan oktal:
Berapakah 3748 ÷ 258 Berapakah 1154368 ÷ 6428

25√374 = 14
      25
      124
      124
          0

3748 ÷ 258 = 148



642√115436 = 137
          642
          3123
          2346
            5556
            5556
                  0

 1154368 ÷ 6428 = 1378

Contoh untuk bilangan heksadesimal:
Berapakah 1E316 ÷ 1516 Berapakah 255AC16 ÷ 52716

15√1E3 = 17
      15
        93
        93
          0

31E316 ÷ 1516 = 1716

527√255AC = 74
        2411
          149C
          149C
                0

 225AC16 ÷ 52716 = 7416

Sekian artikel tentang operasi perhitungan pada sistem bilangan ini, jika ada kesalahan dalam penulisan maupun pembahasan diatas... mohon dikoreksi... terimakasih...