Dengan rahmat-Nya, Buku “Konsep dan Terapan Bahasa Rakitan”, telah selesai
disusun. Semoga dapat membantu dalam memahami pemrograman bahasa tingkat rendah
dengan bahasa Rakitan.
Buku ini ditulis berdasarkan keinginan penulis dari hasil pengalaman mengajar di
laboratorium dan kelas untuk mata kuliah Bahasa Rakitan. Dengan harapan bagi yang akan
mempelajari pemrograman selain bahasa tingkat tinggi dengan bahasa assembly dapat
menjadi alat bantu dalam memahami sebuah mesin komputer pada level bahasa tingkat
bawah. Buku ajar ini berisi tentang sebagian materi bahasa pemrograman bahasa tingkat
rendah, yang terdiri dari 21 bab dengan masing-masing bab membahas :
1. Pengenalan Dasar : Membahas tentang sistem computer, apa itu bahasa assembly, dan
pengatar dari sebuah bahasa assembly Pengenalan dan mengenali bahasa assembly
dan elemen-elemen dasarnya.
2. Sistem Bilangan : Membahas tentang sistem bilangan pada sebuah sistem computer
serta hubungan dengan format data bilangan computer.
3. Arsitektur Perangkat Keras dan Perangkat lunak : Membahas tentang komponen
arsitektur sistem yang terdiri dari perangkat keras dan perangkat lunak. Konsep kerja
mikroprosessor beserta register-register dengan mode pengalamatan.
4. Dasar-Dasar Bahasa Assembly : Membahas Perintah-perintah dan instruksi serta
mode pengalamatan pada bahasa assembly, tentang interrupt menggunakan tool debug
berserta penerapan pemrosesan kondisi dan contoh program menggunakan debug.
5. Menggunakan Tools Assembler TASM (Turbo Assembler) untuk membahas tentang
penggunaan yang dapat dilakukan diantaranya :
a. Layanan Masukan/Keluaran (Input/Output) : Membahas untuk input/output.
b. Pemrosesan Kondisi : Instruksi-instruksi kondisi dan pencabangan.
c. Aritmetika : Instruksi Geser dan Putar, penjumlahan, pengurangan, perkalian
dan pembagian.
d. Procedure dan macro, operasi pada layar, grafik manajemen file dan
pemrograman exe.
Setiap penjelasan pada buku ini akan disertai dengan contoh program yang sederhana
agar mudah dimengerti. Terselesaikannya penyusunan buku ini juga tidak terlepas dari
bantuan beberapa pihak. Beberapa bagian materi diambil dari beberapa sumber yang telah
disebutkan pada daftar pustaka.
Semoga tulisan yang sederhana ini akan memberikan sedikit kemudahan bagi siapa saja yang
berminat atau sedang mempelajari bahasa assembly dan pemrograman bahasa tingkat rendah.
P R A K A T A..........................................................................................................................1
DAFTAR ISI.............................................................................................................................3
PEMBAHASAN : 1..................................................................................................................9
PENGENALAN DASAR.........................................................................................................9
1.1 Pengenalan Sistem Komputer .....................................................................................9
1.2 Apa Itu Bahasa Assembly ..........................................................................................13
1.3 Pengantar Bahasa Assembly ......................................................................................16
PEMBAHASAN : 2................................................................................................................22
SISTEM BILANGAN............................................................................................................22
2.1 Bilangan ....................................................................................................................23
2.2 Bilangan Desimal ......................................................................................................24
2.3 Bilangan Biner...........................................................................................................26
2.1.1 Operasi Aritmatika pada bilangan Biner : .........................................................31
2.1.2 Pecahan Biner ke Desimal .................................................................................34
2.4 Bilangan Oktal...........................................................................................................35
2.4.1 Operasi Aritmatika pada Bilangan Oktal.................................................................37
2.5 Bilangan Hexadesimal...............................................................................................41
2.6 Contoh Konversi Sistem Bilangan ............................................................................47
2.7 Format Data Komputer..............................................................................................51
2.7.1 Data ASCII.........................................................................................................51
2.7.2 Bentuk BCD – Binary Code Desimal ................................................................54
2.7.3 Bentuk BCO - Biner Code Oktal .......................................................................55
2.7.4 Metoda Balikan..................................................................................................55
2.7.5 BILANGAN BERTANDA DAN TIDAK.........................................................56
PEMBAHASAN : 3................................................................................................................60
ARSTEKTUR SISTEM KOMPUTER ................................................................................60
3.1 CENTRAL PROCESSING UNIT (CPU) ...................................................................60
3.2 PENGERTIAN REGISTER DAN PENGALAMATAN MEMORI ........................61
3.3 JENIS-JENIS REGISTER .....................................................................................68
PENGENALAN DASAR
Deskripsi singkat : Dalam pembahasan bab ini akan dibahas mengenai pengenalan
sistem komputer dan pemrograman dengan bahasa assembly serta masalah-masalah yang
dapat diselesaikan dengan bahasa assembly.
Tujuan Pembelajaran :
1. Dapat memahami fungsi dan konsep dua bidang ilmu yang berbeda yang memiliki
hubungan yaitu perangkat keras (hardware) dan perangkat lunak (software).
2. Dapat memahami dan mampu menerangkan perbedaan antara bahasa pemrograman
assembly mikrokontroler dan mikroprosesor.
3. Mengetahui dan mengerti konsep dan aplikasi pada sebuah bahasa rakitan serta
komponen yang terlibat sebagai bahasa tingkat rendah.
4. Mengetahui beberapa fungsi servis dan interupsi yang digunakan pada sebuah bahasa
rakitan.
Mikroprosesor adalah piranti keras yang tidak akan bisa bekerja kalau tidak ada perangkat
lunak. Inilah yang membedakan mikroprosesor dengan rangkaian digital diskrit.
Kemampuannya untuk diprogram, dan diprogram ulang adalah suatu kelebihan didalam
sistem mikroprosesor. Contohnya dalam suatu sistem pengendali lampu lalu lintas dengan
rangkaian diskrit perlu menambahkan atau merubah rangkaian bila diperlukan perubahan
sistem, tetapi dengan sistem mikroprosesor, bisa dilakukan dengan hanya merubah program.
Perhatikan juga bahwa PC saat ini bisa multi fungsi dengan hanya mengganti programnya
saja. Dalam perkembangannya, mikroprosesor dibuat menurut kebutuhan aplikasinya yang
lebih spesifik, dalam hal ini menjadi beberapa jenis, yaitu;
Mikrokontroler adalah salah satu bagian dasar dari suatu sistem komputer. Meskipun
berbentuk jauh lebih kecil daripada personal komputer (PC) dan mainframe, mikrokontroler
dibangun dari elemen-elemen dasar yang sama. Secara sederhana, komputer akan
menghasilkan keluaran spesifik berdasarkan masukan yang diterima dan program yang
dikerjakan. Seperti umumnya komputer, mikrokontroler adalah alat yang mengerjakan
instruksi-instruksi yang diberikan kepadanya. Tahun 1976 Intel meluncurkan mikrokontroler
pertama yang disebut seri MCS-48 yang berisi lebih dari 17.000 transistor, hingga saat ini
seri ini masih digunakan untuk aplikasi khusus. Mikrokontroler, adalah mikroprosesor yang
dikhususkan untuk instrumentasi dan kendali. Contoh aplikasi pada kendali motor, berperan
seperti PLC (Programmable Logic Controller), pengaturan pengapian dan injeksi bahan
Ekstensi yang dihasilkan dari bahasa assembly adalah file dengan ekstensi COM dan
EXE. Secara umum kedua jenis file tersebut memiliki perbedaan antara program yang
berekstensi COM dan EXE, yang merupakan ukuran luas daerah yang menyebabkan kelainan
pemrograman dalam assembler.
Setiap jenis CPU memiliki bahasa mesin-nya masing-masing. Instruksi bahasa mesin
dinyatakan dalam bilangan numeric (Binari) yang tersimpan sebagai byte di memori. Masing-
masing instruksi memiliki kode numerik yang unik yang disebut sebagai “operation code”
atau “opcode ”. Setiap perintah diawali dengan suatu opcode dan dapat diikuti oleh data.
Bahasa assembly akan meningkatkan pemahaman tentang level yang lebih rendah.
Pada pembahasan ini memberikan titik pandang bahwa bahasa assembly sebaiknya dipelajari
secara kontekstual, sehingga interaksi perangkat keras dan perangkat lunak komputer
kemungkinan akan lebih mudah dipahami.
Bahasa Assembly adalah bahasa pemrograman dengan korespondensi satu-satu antara
perintah-perintah/pernyataannya dan bahasa mesin komputer. Bahasa assembly tidak satu
jenis sebagaimana CPU komputer yang bermacam-macam. Setiap bahasa assembly secara
langsung dipengaruhi oleh set instruksi mesin komputer dan arsitektur perangkat keras.
Secara singkat, bahasa assembly IBM-PC mengacu pada instruksi-instruksi yang dikenali
oleh keluarga mikroprosesor Intel 8086-80486.
Applications
C,VB,JAVA
Word, Excel,Photoshop
Dalam bahasa assembly program sumbernya menganut prinsip 1 baris untuk satu
perintah, setiap baris perintah tersebut bisa terdiri atas beberapa bagian, yaitu bagian label,
AX (register)
Komentar digunakan untuk menjelaskan maksud sekumpulan baris program atau satu
baris program, setiap komentar didahului oleh tanda titik koma (;). Komentar tidak dirakit ke
dalam bahasa mesin. Berikut ini contoh program menggunakan emu8086.
name "Coba" ; Program menampilkan Latihan
org 100h ; set segment register:
mov ax, 0b800h
mov ds, ax
; print program "Latihan"
mov [02h], 'L'
Judul (name) akan memulai suatu program bahasa assembly. Pada judul fungsinya
secara umum akan sesuai dengan bagaimana suatu program dihasilkan. Fungsi beberapa
pengarah yang digunakan pada program di atas dapat dijelaskan sebagai berikut:
NAME merupakan nama program yang akan dibuat.
ORG singkatan dari originate untuk menentukan alamat awal suatu blok dalam
program baik untuk blok data maupun blok perintah.
Tubuh program dapat saja mengandungi label, mnemonik, Operand, komentar dan
pengarah. Secara umum susunan perintah pada tubuh program dalam satu baris adalah
sebagai berikut:
Label : MNEMONIK Operand ; Komentar
Label akan dinyatakan apabila baris program akan menjadi tempat lompatan dari
baris program lain. Label dituliskan sebagaimana adanya suatu pengenal dan dapat
dinyatakan sesuai maksud lompatan dan diakhiri dengan titik dua (:).
Mnemonik adalah sekumpulan huruf yang terdiri dari dua sampai lebih, singkatan
yang mewakili dari maksud perintah dinyatakan, misalnya MOV disingkat dari
MOVE yang berarti pemindahan nilai, yaitu MOV AH,02h berarti AH=02h.
Mnemonik dapat saja memerlukan Operand, dan kadangkala lebih dari dua Operand.
Mnemonik berlaku khusus, seperti INT disingkat dari interrupt yang diartikan
sela/jeda, merupakan pemanggilan perangkat keras yang dihasilkan secara eksternal
dari sinyal perangkat keras atau pemanggilan perangkat lunak secara internal dari
SISTEM BILANGAN
Deskripsi singkat : Dalam pembahasan bab ini akan dibahas mengenai pengenalan
sistem Bilangan pada komputer dan bahasa assembly serta fungsi-fungsi yang dalam
pengaksesan ke port dengan bahasa assembly.
Tujuan Pembelajaran :
1. Dapat memahami fungsi bilangan biner, octal, desimal, heksadesimal yang
dibutuhkan untuk mempelajari bahasa assembler.
2. Memahami jenis-jenis sistem bilangan yang digunakan pada teknik mikroprosessor
3. Memahami konversi sistem bilangan desimal ke sistem bilangan biner
4. Memahami konversi sistem bilangan desimal ke sistem bilangan oktal
5. Memahami konversi sistem bilangan desimal ke sistem bilangan heksadesimal
6. Memahami konversi sistem bilangan biner ke sistem bilangan oktal atau sebaliknya
7. Memahami konversi sistem bilangan biner ke sistem bilangan heksadesimal atau
sebaliknya
8. Memahami konversi sistem bilangan desimal dan sistem bilangan biner antara 0 dan 1
9. Mampu merubah bilangan desimal ke bentuk BCD atau sebaliknya
10. Mampu merubah bilangan desimal ke bentuk BCH atau sebaliknya
11. Memahami ASCII Code untuk pembentukan karakter
Binary 2 01
Ternary 3 012
Quarternary 4 0123
Quinary 5 01234
Senary 6 012345
Septenary 7 0123456
Undenary 11 0123456789A
duodenary 12 0123456789AB
tredenary 13 0123456789ABC
quatuordenary 14 0123456789ABCD
quidenary 15 0123456789ABCDE
1 100 =1
2 101 =10
3 102 =100
4 103 =1000
5 104= 10000
……. …….
……. …….
Terlihat bahwa mantissa selalu lebih besar atau sama dengan -0,1 dan lebih kecil atau
sama dengan 0,1. Bentuk penulisan dengan Standard Exponential Form disebut Floating-
Point Number. Sistem bilangan desimal menggunakan komplemen, dilakukan untuk
mengurangi dua buah bilangan dimana kedua bilangan kedua lebih besar daripada
bilangan pertama. Di dalam sistem bilangan desimal, ada 2 macam komplemen yang
digunakan, yaitu komplemen 9 (9’s complement atau nine’s complement yang merupakan
komplemen basis minus 9) dan komplemen 10 (10’s complement atau ten’s complement yang
merupakan komplemen basis).
Catatan :
1. Bilangan 0 dan 1 merupakan bilangan biner yang disebut BIT (Binary digit).
2. Kumpulan dari 4 bit disebut NIBBLE. Nibble beranjak dari bilangan 0 sampai
dengan 15 (bilangan desimal) dan 0 sampai dengan F (bilangan hex).
3. Satu BYTE terdiri dari 8 bit atau 2 nibble. Angka beranjak dari bilangan 0
sampai dengan 255 (desimal) dan 00 sampai dengan FF (hexadesimal)
4. Satu WORD terdiri dari 16 bit.
5. Satu DOUBLE WORD terdiri dari 32 bit
6. Satu PARAGRAF terdiri dari 128 bit.
7. Sati PAGE (halaman) terdiri dari 256 byte (2048 bit)
Notasi biner merupakan integer dengan menggunakan simbol 0 dan 1. Jika pada notasi
basis memiliki kuantitas posisi satuan, puluhan, ratusan dan seterusnya, pada notasi biner
memiliki kuantitas posisi satu (20), dua (21), empat (22), delapan (23), dan seterusnya. Untuk
mengubah integer basis dua (biner) menjadi basis sepuluh yaitu dengan cara mengalikan
setiap digit dengan kuantitas posisinya.
Contoh:
1101(2) = 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20
=8+4+0+1
= 13(10)
Jadi 1101(2) = 13(10)
11001(2) = 1 × 24 + 1 × 23 + 1 x 22 + 0 x 21 + 1 x 20
= 16 + 8 + 1
= 25
Byte 8 0-255
Word 16 0-65,535
1 20 =1
2 21 =2
3 22 =4
4 23 =8
5 24=16
……. …….
……. …….
Untuk mengetahui lebih jelas mengenai bilangan konversi biner ke desimal, dapat dilihat
pada tabel 2.7
Konsep sistem bilangan biner adalah menggunakan 2 macam simbol bilangan berbasis 2
digit angka, yaitu 0 dan 1. Berikut cara lain dengan contoh bilangan 1001 dapat diartikan :
1001
1x20 =1
0x21 =0
0x22 =0
1x23 =8
9 (10)
1+0 =1
1+0 =1
b. Pengurangan
Bilangan biner dikurangkan dengan cara yang sama dengan pengurangan bilangan
desimal. Dasar pengurangan untuk masing-masing digit bilangan biner adalah :
0-0=0
1-0=1
1-1=0
0–1=1 dengan borrow of 1, (pijam 1 dari posisi sebelah kirinya).
Contoh :
11101
1011 -
10010
1–0–1 =0
1–1 =0
1–0 =1
1 0 0 1 0
c. Perkalian
Dilakukan sama dengan cara perkalian pada bilangan desimal. Dasar perkalian
bilangan biner adalah :
0x0=0
1x0=0
0x1=0
1x1=1
contoh
Desimal Biner
14 1110
12 x 1100 x
28 0000
14 + 0000
168 1110
1110 +
10101000
d. Pembagian
Pembagian biner dilakukan juga dengan cara yang sama dengan bilangan desimal.
Pembagian biner 0 tidak mempunyai arti, sehingga dasar pembagian biner adalah :
Desimal Biner
5 / 125 \ 25 101 / 1111101 \ 11001
10 - 101 -
25 101
25 - 101 -
0 0101
101 -
0
Nilai posisi sistem bilangan octal merupakan perpangkatan dari nilai 8, seperti yang
terlihat dalam tabel 2.9.
1 80 = 1
2 81 = 8
3 82 = 64
4 83 = 512
5 84= 4096
……. …….
……. …….
Pada tabel 2.7, penjumlahan angka 7 langsung menuju ke angka 10. Hal ini
merupakan bilangan oktal yang terdiri dari 0, 1, 2, 3, 4, 5, 6, 7 dimana nilai maksimal adalah
7. Dan apabila lebih dari 7 maka itu adalah carry of dan sisanya akan dijumlahkan pada
kolom berikutnya. Contoh :
1 + 6 = 7. ----- > tidak lebih dari 7. Maka tetap.
1 + 7 = 8. ----- > carry of 1 dan sisa 0, maka hasilnya adalah 10 (8 mod 8= hasil 1 sisa 0)
2 + 7 = 11. --- > carry of 1 dan sisa 1, maka hasilnya adalah 11 (9 mod 8= hasil 1 sisa 1)
Untuk memudahkan perhitungan, dapat digunakan persamaan berikut ini :
Hasil = n * 10 + (jumlah bilangan mod 8)
n = banyaknya modulo yang terjadi
Contoh:
7(8) + 6(8) + 4(8) =
17 mod 8 = hasil 2 sisa 1
= 21
Konsep & Terapan Bahasa Rakitan 37
Contoh :
Desimal Oktal
21 25
87 + 127 +
108 154
5 10 + 7 10 = 12 10 = 14 8
2 10 + 2 10 + 1 10 = 5 10 = 58
1 10 = 1 10 = 18
2. Pengurangan
Pengurangan Oktal dapat dilaukan secara sama dengan pengurangan bilangan
desimal.
Contoh :
Desimal Oktal
108 154
87 - 127 -
21 25
48 -78 +88 (borrow of) = 5 8
6 8 - 2 8- 1 8 =28
18 -18 =08
Untuk mengurangi dua buah bilangan, di mana bilangan kedua lebih besar daripada
bilangan pertama, biasanya komputer menggunakan metode yang disebut komplemen
(complement), yaitu dengan komplemen basis minus 7 (radix-minus-seven
complement) atau komplemen basis (radix complement). Kompelemen pada dasarnya
mengubah bentuk pengurangan menjadi bentuk penambahan. Di dalam sistem
bilangan octal ada 2 macam komplemen yang dipergunakan, yaitu komplemen 7 (7’s
complement atau seven’s complement yang merupakan komplemen basis minus 7) dan
komplemen 8 (8’s complement atau eight’s complement yang merupakan komplemen
basis).
Contoh pengurangan dalam bentuk octal adalah :
34(8) – 165(8)
16
14 x
70
16 +
250
7 10 + 6 10 = 13 10 = 15 8
1 10 + 1 10 = 2 10 = 2 8
4. Pembagian
Pembagian octal juga dapat dilakukan dengan cara yangsama dengan pembagian
desimal. Contoh dari pembagian bilangan octal adalah :
11: 3 = 3
1204 : 27 = 34
Desimal Oktal
12 / 168 \ 14 14 / 250 \ 16
12 - 14 - 14 8 x 1 8 = 14 8
48 110
48 – 110 - 14 8 x 6 8 = 4 8 x 6 8 = 30 8
0 0 1 8 x 6 8= 6 8 +
110 8
Position value system bilangan heksadesimal adalah perpangkatan dari nilai 16.
Contoh :
C7(16) = …… (10)
7 x 16 0 = 7
1
C x 16 = 192
199
Jadi 199 (10)
Nilai posisi sistem bilangan hexadesimal merupakan perpangkatan dari nilai 16
seperti pada tabel 2.12.
Tabel 2.12 Posisi Digit dari Bilangan Hexadesimal
Posisi Digit (dari
Position Value
kanan)
1 160 = 1
2 161 = 16
3 162 = 256
4 163 = 4096
5 164= 65536
……. …….
……. …….
Posisi digit heksadesimal. Setiap posisi digit heksadesimal mewakili bilangan pangkat dari
16.
Konsep & Terapan Bahasa Rakitan 41
163 162 161 160
Nilai 4096 256 16 1
Pada bahasa assembler, bilangan hexadesimal mutlak harus dikuasai. Hal ini karena
berbagai perintah dalam program yang dibuat menggunakan utility “DEBUG” dari “DOS”.
Seperti bilangan biner yang berdasarkan 2 atau bilangan octal yang berdasarkan 8,
bilangan heksadesimal berdasarkan 16, seperti terlihat pada tabel 2.13 yang sesuai dengar arti
heksadesimal sendiri, yaitu heksa = 6 dan desimal = 10.
Contoh:
a. 3A = (3*161)+(A*160) = 58
b. A341 = (10*163)+(3*162)+(4*161)+(1*160) = 41793
Bilangan heksadesimal dapat konversi bilangan pecahan. Perhatikan contoh berikut :
a. 0, A2 = (10*16-1)+(2*16-2) = 0.625+0.0078125 = 0.6328125
b. 0,3B2 = (3*16-1)+(11*16-2) +(2*16-3) = 0.1875+0.04296875+0.00048828125 =
0.23095703125
Pada tabel 2.12, merupakan contoh perhitungan dengan menggunakan tabel yang
tersedia, untuk melakukan perhitungan heksadesimal 64(16) =……. (10). Hasil yang didapat
adalah 100(10).
Tabel 2.15 Tabel Perhitungan Heksadesimal ke Desimal
b. Pengurangan
Pengurangan bilangan hexadesimal dapat dilakukan secara sama dengan pengurangan
bilangan desimal.
4833 12E1
1575 - 627 -
3258 CBA
16 10 (pinjam) + 1 10 - 710 = 10 10 = A 16
14 10 - 7 10 - - 1 10 (dipinjam) = 11 10 =B 16
1610 (pinjam) + 2 10 - 610 = 12 10 = C 16
1 10 – 1 10 (dipinjam) 0 10 = 0 16
c. Perkalian
Langkah – langkah :
5. Kalikan masing-masing kolom secara desimal
6. Ubah dari hasil desimal ke octal
7. Tuliskan hasil dari digit paling kanan dari hasil octal
8. Jika hasil perkalian tiap kolol terdiri dari 2 digit, maka digit paling kiri
merupakan carry of untuk ditambahkan pada hasil perkalian kolom
selanjutnya.
Contoh :
Desimal Hexadesimal
AC
172 1B x
27 x 764
1204 C 16 x B 16 =12 10 x 1110= 84 16
344 + A16 x B16 +816 = 1010 x 1110+810=7616
4644
AC
1B x
764
AC
C16 x 116 = 1210 x 110 =1210=C16
A16 x 116 = 1010 x110 =1010=A 16
d. Pembagian
Contoh :
Desimal Hexadesimal
27 / 4646 \ 172 1B / 1214 \ AC
27- 10E - 1B16xA16 = 2710x1010=27010= 10E16
194 144
189 – 144- 1B 16 x C16 = 2710 x 10 10 = 3240 10
54 0 =14416
54 –
0
3 2 4
diperjelas :
100 = 0 x 2 0 =0
0x21 =0
1x22 =4
4
Begitu seterusnya untuk yang lain.
3. Konversi ke Hexademial
Dapat dilakukan dengan mengkonversikan tiap-tiap empat buah digit biner yang
dimulai dari bagian belakang.
Contoh :
11010100
1101 0100
D 4
Dalam contoh ini BCD terdiri dari 3 kelompok bilangan masing-masing terdiri dari 4
bit , dan jika bilangan desimal tersebut di atas dikonversi ke dalam bilangan biner secara
langsung adalah 317(10) = 100111101(2) dan hanya memerlukan 9 bit. Untuk contoh proses
sebaliknya dapat dilihat di bawah ini.
Contoh
Biner Code Desimal 0101 0001 0111 0000
Desimal 5 1 7 0
Contoh
Biner Code Oktal 101 100 000 001
Bilangan Oktal 5 4 0 1
Jadi bentuk BCO diatas adalah bilangan Z(8) = 5401.
Bentuk BCH - Biner Code Heksadesimal
Bilangan heksadesimal dalam setiap tempat dapat terdiri dari 16 bilangan yang
berbeda-beda ( angka dan huruf ). Bentuk biner untuk 16 elemen memerlukan 4 bit.
Sebuah BCH mempunyai 4 bit biner untuk setiap tempat bilangan heksadesimal.
Contoh
Z(16) = 31AF
Bilangan Heksadesimal AF Biner Code Heksadesimal 310011000110101111
Untuk proses sebaliknya, setiap 4 bit dikonversi ke dalam bilangan heksadesimal.
Contoh
Biner Code Heksadesimal Bilangan Heksadesimal A1010011000011000618
Jadi bentuk BCH diatas adalah bilangan Z(16) = A618.
Contoh 1
Tunjukkan bilangan Heksadesimal 4B2,1A616 ke bentuk bilangan Biner, Oktal dan
Bilangan Desimal yang ekuivalen.
Lakukanlah :
a. Tulis ulang 4B2,1A616 dalam bentuk BCH
b. Groupkan ulang kedalam bentuk BCO dari titik Desimal
c. Tunjukkan ekuivalen Oktalnya setiap BCO
d. Akhirnya konversikan bilangan Oktal ke ekuivalen Desimal
Contoh 2
Selesaikan bilangan Heksadesimal 2E3,4D16 ke bentuk bilangan Biner, Oktal dan
2E3,4D16 = 0010 1110 0011 , 0100 11012
= 001 011 100 011 , 010 011 0102
= 1 3 4 3 , 2 3 28
= 739,30110
Bit tanda
One’s complement. Untuk menghitung bilangan One’s complement dari suatu bilangan
maka balikan seluruh nilai bitnya. Contoh, One’s complement dari 11110000b adalah
00001111b.
Two’s complement. Untuk menyimpan nilai negetif maka digunakan bilangan Two’s
complement. Two’s complement diperoleh dengan menambah satu pada bilangan One’s
complement
Contoh Two’s complement dari +6 (00000110b), balikan nilai bitnya untuk mendapatkan
ones compelent menjadi 11111001b, untuk memperoleh Two’s complement ditambah
satu menjadi : 11111010b (ini nilai Two’s complement untuk -6). Untuk mendapatkan
kembali nilai +6 sebagai berikut :
11111010 -6
0 0 0 0 0 1 0 1 One’s complement
+ 1
Nilai maksimum dan minimum. Karena nilai paling kiri pada bilangan bertanda
digunakan untuk tanda bilangan, maka ukuran bilangan akan berkurang, yang digunakan
hanya 7 bit sehingga nilai paling besar yang bisa dicapai adalah +127.
Tabel berikut menunjukan nilai maksimum dan minimum untuk byte, word dan
double word bertanda :
Tabel 2.16 Nilai Maksimum dan Minimum byte, word dan double word
Tipe penyimpan Nilai terendah Nilai tertinggi
+--------------------------------------------+
| >>>> Bilangan <<<< |
+------------+---------------+---------------+
| Biner |Tidak Bertanda | Bertanda |
+------------+---------------+---------------+
| 0000 0101 | + 5 | + 5 |
| 0000 0100 | + 4 | + 4 |
| 0000 0011 | + 3 | + 3 |
| 0000 0010 | + 2 | + 2 |
| 0000 0001 | + 1 | + 1 |
| 0000 0000 | 0 | 0 |
| 1111 1111 | + 255 | - 1 |
Deskripsi singkat : Dalam pertemuan ini akan dibahas mengenai arsitektur pada sebuah
sistem komputer serta pengenalan register sebagai pengalamatan sistem komputer.
Tujuan Pembelajaran :
1. Mengetahui jenis-jenis register yang digunakan pada teknik mikroprosessor
2. Dapat memahami fungsi dari register-register yang digunakan pada sebuah sistem
komputer sebagai pengalamat data.
3. Memahami tugas dan kelompok register yang digunakan mikroprosesor.
4. Mengerti konversi alamat logic, alamat fisik pada pengelolaan memori.
CPU dibagi menjadi dua bagian : Arithmetic Logic Unit (ALU) dan Control Unit (CU).
ALU melaksanakan operasi aritmetik, logic, dan penggeseran, CU mengambil data dan
instruksi dan menerjemahkan kode (decode) alamat untuk ALU.
Register yang mengisi 16 bit dari kiri biasa disebut Register Segment dan Register yang
mengisi 16 bit dari kanan adalah Register Offset. Isi Register Segment disebut Segment dan
isi Register Offset disebut Offset.
Cara pengalamatan memori yang dilakukan komputer sering disebut Relative Address.
Contoh Relative Address dan Alamat Mutlak:
A123:099A
Komposisi Bit Segment 1010 0001 0010 0011 0000
Komposisi Bit Offset 0000 1001 1001 1010
Untuk memberikan alamat sesungguhnya dari sebuah nilai alamat logika dalam
nilai segment:offset, maka diperlukan suatu cara untuk menterjemahkan nilai tersebut ke
dalam notasi alamat fisik. Metode konversinya yaitu dengan cara memisahkan nilai segment,
kemudian tambahkan satu digit '0' heksadesimal pada digit paling kiri, lalu ambil nilai
offsetnya, jumlahkan ke bawah seperti halnya menghitung bilangan-bilangan desimal sehari-
hari.
Contoh :
Diketahui : Nilai alamat logika adalah 0220:1234
Ditanyakan : Berapa nilai alamat fisiknya ?
Jawab:
Nilai segment : 0220
Geser satu digit menjadi : 02200
Nilai offset : 1234
02200
1234
------- +
03434
Untuk nilai binary, alamat segment harus diubah menjadi binary, lalu geserlah nilai
tersebut ke kiri sebanyak empat bit, artinya akan timbul empat binary digit 0 berturut-turut di
sebelah kanan. Kemudian nilai offset juga diubah ke dalam binary dan tambahkanlah
hasilnya ke nilai offset yang telah digeser tadi. Untuk mempermudah dalam membaca,
kembalikan nilai akhir dalam binary tersebut ke dalam notasi heksadesimal
Contoh :
Diketahui : Nilai alamat logika adalah 0220:1234
Ditanyakan : Berapa nilai alamat fisiknya ?
Jawab :
Nilai segment : 0220
Tambahkan :
0000 0010 0010 0000 0000
0001 0010 0011 0100
------------------------------------ +
0000 0011 0100 0011 0100
Alamat fisik secara binary : 0000 0011 0100 0011 0100
Secara heksadesimal : 03434 heksa
Mikroprosesor 8086/8 memiliki 20 bit jalur alamat, sehingga total alamat yang dapat
ditangani oleh prosesor ini sebanyak 220 = 1 Megabyte . Total alamat ini kemudian dibagi-
bagi menjadi segmen-segmen (DS, CS, ES, dan SS) dengan ukuran 1 segmen sebesar 64
Kilobyte. Data-data dalam 1 segmen itu disebut offset. Kemudian pengalamatan secara logika
pada program (logical address) dituliskan dalam format segmen : offset. Dari logical address
berupa segmen : offset kita dapat mendapatkan alamat fisik (physical address) dengan rumus
PA = segmen x 10h + offset. Contoh : Kita ingin mengakses alamat Bootstrap (alamat
memori yang dituju pertama kali oleh mikroprosesor saat booting) yaitu di FFFF0h, maka
kita dapat menuliskannya dalam segmen:offset sebagai FFFF:0000. Terkadang dalam
menentukan segmen:offset dari alamat total terjadi overlapping, yaitu alamat yang sama
dapat diakses dari bermacam segmen:offset yang berbeda. Contoh : kita ingin mengakses
alamat fisik 1100h, dapat dinyatakan sebagai 0100:0100h ataupun 0110:0000h.
Untuk mendefinisikan dari pengalamatan mikroprosessor 8086 dapat mengalamatkan
sampai 1 MB memori, bahwa 8086 adalah procesor 16 bit. Banyaknya memori yang dapat
dicatat atau dialamatkan oleh procesor 16 bit adalah maksimal 216 byte (=64 KB).
Hal ini dapat dimungkinkan dengan adanya pengalamatan yang menggunakan sistem 20
bit walaupun sebenarnya procesor itu hanya 16 bit. Dengan cara ini dapat dialamatkan 220
byte (=1 MB) memori. Tetapi masih tetap ada satu kendala dalam pengalamatan 20 bit ini.
Yaitu bahwa sesuai dengan tipenya procesor ini hanya mampu mengakses 16 bit data pada
Secara umum register-register dalam kelompok ini dapat digunakan untuk berbagai
keperluan, walaupun demikian ada pula penggunaan khusus dari masing-masing register
ini yaitu :
1. Register AX (Accumulator), secara khusus digunakan pada operasi aritmatika
terutama dalam operasi perhitungan. Berfungsi sebagai masukan untuk menampung
hasil perhitungan (add, sub, mul & div) dan menyimpan data sementara. Pada proses
pembagian, jika bilangan pembagi besarnya 16 bit, bilangan yang dibagi ditampung di
pasangan register DX : AX. Hasil ditampung pada register AX sedangkan sisa hasil
pembagian ditampung pada register DX. Jika 8 bit, ditempatkan di AX dari proses
pembagian, dan hasilnya ditempatkan pada register AL, sedangkan hasil pembagian
pada register AH.
2. Register BX (Base), biasanya digunakan untuk menunjukkan suatu alamat offset dari
suatu segmen. Register ini dapat mengambil dan menulis langsung dari/ke memori
BX, yang terdiri dari BH dan AL. Dapat juga menulis langsung dari/ke memori
dengan segmen (DS: Data Segmen). Dapat berfungsi sebagai Pointer (penunjuk) pada
basis data. Misal 32 bit EBX dijabarkan BH + BX + BL
3. Register CX (Count), digunakan secara khusus pada operasi looping (perulangan)
dimana register ini menentukan berapa banyaknya looping yang akan terjadi. Secara
spesifik sebagai counter untuk meletakkan jumlah lompatan pada looping yang
dilakukan, dan dapat sebagai penyimpan data sementara.
O = Overflow S = Sign
D = Directione Z = Zero
I = Interrupt A = Auxiliary Carry
T = Trap P = Parity
X = tidak terdefinisi C = Carry
Bit-bit dalam register disebut sebagai bit-bit flag . Adapun flag yang terdapat pada
mikroprosesor 8088 keatas adalah :
Flag status. Bit-bit flag status menggambarkan keluaran operasi aritmetik dan logic
yang dilaksanakan oleh CPU. Terdapat flag Overflow, Sign, Zero, Auxiliary Carry,
Parity dan Carry.
Flag Carry diset ketika hasil operasi aritmetik tidak bertanda lebih besar dari ukuran
Operand tujuan. Contoh, jika nilai 200 dan 56 dijumlahkan dan ditempatkan dalam
register 8-bit (seperti AL), hasilnya akan terlalu besar dan tidak mencukupi, maka flag
Carry akan diset. Nilai flag 1 = ada carry, 0 = tidak ada carry.
Flag Overflow diset pada saat hasil operasi aritmetik bertanda terlalu besar untuk
dimuat ke dalam Operand tujuan. Nilai flag 1 = overflow dan 0 = tidak overflow.
Flag Sign diset ketika hasil operasi aritmetik dan logic menghasilkan nilai negatif.
Karena bilangan negatif selalu bernilai 1 pada bit posisi tertingginya, flag Sign selalu
merupakan salinan bit tanda Operand tujuan. Nilai flag 1 = negatif, 0 = positif.
Flag Zero diset ketika hasil operasi aritmetik dan logic menghasilkan nilai 0. Flag
sering digunakan oleh instruksi jump dan loop, untuk dapat mencabang ke logasi bari
dalam program berdasarkkan perbandingan dua buah nilai. Nilai flag 1 = nol , 0 = bukan
nol.
Flag Auxiliary Carry diset ketika operasi menyebabkan carry dari bitn 3 ke bit 4
(atau meminjam dari bit 4 ke bit 3) Operand. Flag ini jarang digunakan oleh pemrogram,
nilai flag 1 = ada carry dan 0 = tidak ada carry.
Flag Parity menggambarkan jumlah bit dalam hasil operasi yang diset. Jika terdapat
bilangan genap maka Paritynya genap. Jika terdapat bilangan ganjil maka paritinya ganjil.
Mode pengalamatan adalah bagaimana cara menunjuk dan mengalamati suatu lokasi
memori pada sebuah alamat di mana operand akan diambil. Mode pengalamatan diterapkan
Keterangan :