SlideShare ist ein Scribd-Unternehmen logo
1 von 210
Downloaden Sie, um offline zu lesen
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/338143747
PEMROGRAMAN BAHASA ASSEMBLY MIKROPROSESOR 8086
Book · December 2019
CITATIONS
0
READS
5,454
1 author:
Some of the authors of this publication are also working on these related projects:
Information Security View project
Assembly Programming View project
Indra Gunawan
Sekolah Tinggi Teknologi Ronggolawe Cepu
12 PUBLICATIONS   1 CITATION   
SEE PROFILE
All content following this page was uploaded by Indra Gunawan on 29 January 2021.
The user has requested enhancement of the downloaded file.
INDRA GUNAWAN, ST., MKom., CEH., CHFI
PEMROGRAMAN
BAHASA ASSEMBLY
MIKROPROSESOR
8086
Pemrograman Assembly Mikroprosesor 8086
2
Pemrograman Assembly Mikroprosesor 8086
Penulis: Indra Gunawan
Editor: Guepedia
Tata Letak: Guepedia
Sampul: Guepedia
Diterbitkan Oleh:
Guepedia
The First On-Publisher in Indonesia
E-mail: guepedia@gmail.com
Fb. Guepedia
Twitter. @guepedia
Website: www.guepedia.com
Hak Cipta dilindungi Undang-undang
All right reserved
Indra Gunawan, ST., M.Kom., CEH., CHFI
3
KATA PENGANTAR
Terima kasih yang sebesar besarnya terutama
kepada istri tercinta yang telah memberikan banyak
dorongan, semangat dan doa sehingga buku ini dapat
terselesaikan, dan tak lupa terima kasih kepada semua
pihak yang turut membantu secara langsung maupun
tidak langsung atas terbitnya buku ini. Semoga buku ini
dapat bermanfaat bagi pembaca semuanya.
Terima kasih
Batam
Penulis
(Indra Gunawan)
.
Pemrograman Assembly Mikroprosesor 8086
4
Daftar Isi
Bagian 1 Perkembangan Mikroprosesor................................. 8
Bagian 2 Komponen Dasar Mikroprosesor................................... 10
2.1 ARSITEKTUR MIKROPROSESOR 8086 ........................................ 10
2.1.1 BUS INTERFACE UNIT ............................................................ 11
2.1.2 EXECUTION UNIT................................................................... 13
Bagian 3 Interupsi........................................................................... 17
3.1 BIOS INTERRUPT ....................................................................... 18
3.2 DOS INTERRUPT ........................................................................ 20
Bagian 4 Memulai Assembly........................................................... 24
4.1 KODE EDITOR ........................................................................... 24
4.2 MENJALANKAN PROGRAM DOSBOX.......................................... 24
4.3 MENJALANKAN APLIKASI EMU8086......................................... 28
4.3 DEBUGGING DENGAN EMU8086............................................... 29
4.4 STRUKTUR KODE ASSEMBLY.............................................. 31
4.4.1 Sintak .Model ............................................................. 32
4.4.2 Sintak Org 100h......................................................... 32
4.4.3 Sintak .Code............................................................... 32
4.4.4 Sintak .Data ............................................................... 32
4.4.5 Sintak Label ............................................................... 32
Bagian 5 Transfer Data................................................................... 33
5.1 MOV ......................................................................................... 33
5.2 LOAD EFFECTIVE ADDRESS ...................................................... 34
5.3 LOAD SEGMENT REGISTER ....................................................... 35
5.4 EXCHANGE ............................................................................... 36
5.6 COMPARE ................................................................................. 38
5.7 TRANSLATE .............................................................................. 39
5.8 CONVERT.................................................................................. 41
Convert Byte To Word (Cbw) .................................................... 41
Convert Word To Double (Cwd)................................................ 41
Bagian 6 Cetak Karakter Dan Kalimat ......................................... 43
6.1 CETAK SATU KARAKTER (INT 21H/AH=02H) ........................... 43
6.2 CETAK BANYAK KARAKTER (INT 21H/AH=02H)...................... 44
6.3 CETAK KALIMAT DSENGAN PERULANGAN (INT 21H/AH=02H) 47
6.4 CETAK KALIMAT DENGAN VARIABEL (INT 21H/AH=09H) ....... 48
Indra Gunawan, ST., M.Kom., CEH., CHFI
5
6.5 CETAK KALIMAT BERWARNA (INT 10H/AH=09H).................... 51
6.6 CETAK KALIMAT BERWARNA (INT 10H/AH=1300H)................ 52
6.7 CETAK KALIMAT BERWARNA REAL TIME ................................ 55
6.7.1 Cetak 1 Karakter............................................................... 55
6.7.2 Cetak Banyak Karakter..................................................... 57
6.7.3 Cetak Animasi Kalimat Menggunakan Memori Layar ..... 58
6.8 CETAK DARI INPUT KEYBOARD ................................................. 61
6.8.1 Baca 1 Karakter Dengan Int 16h/Ah=0h.......................... 62
6.8.2 Baca 1 Karakter Dengan Int 21h/Ah=01h........................ 63
6.8.2 Baca Banyak Karakter...................................................... 64
Bagian 7 Operasi Logika................................................................. 66
7.1 OPERASI AND ..................................................................... 66
7.2 OPERASI OR....................................................................... 68
7.3 OPERASI XOR ..................................................................... 70
7.4 OPERASI NOT ..................................................................... 72
Bagian 8 Tipe Data .......................................................................... 74
Bagian 9 Mode Pengalamatan ........................................................ 76
9.1 REGISTER ADDRESSING............................................................. 77
9.2 IMMEDIATE ADDRESSING ......................................................... 78
9.3 DIRECT MEMORI ADDRESSING ................................................. 79
9.4 INDIRECT MEMORI ADDRESSING .............................................. 80
9.5 BASE RELATIVE ADDRESSING .................................................. 83
9.6 DIRECT INDEX ADDRESSING..................................................... 84
9.7 SCALE FACTOR ADDRESSING.................................................... 87
Bagian 10 Array............................................................................... 91
10.1 ARRAY SATU DIMENSI............................................................ 91
10.2 ARRAY MULTI DIMENSI.......................................................... 94
Bagian 11 Percabangan Dan Perulangan ...................................... 99
11.1 LABEL..................................................................................... 99
11.2 PERCABANGAN DENGAN LOMPATAN ................................... 101
11.2.1 Lompatan Tanpa Syarat................................................ 102
11.2.2 Lompatan Bersyarat ..................................................... 104
11.3 PERULANGAN ....................................................................... 108
11.3.1 Perulangan Tanpa Syarat............................................. 108
11.3.2 Perulangan Bersyarat................................................... 111
Bagian 12 Stack (Tumpukan)........................................................ 113
Pemrograman Assembly Mikroprosesor 8086
6
Bagian 13 Procedure Dan Macro .................................................. 116
13.1 PROSEDUR ........................................................................ 116
13.2 MACRO............................................................................. 121
Bagian 14 Operasi Aritmatika...................................................... 125
14.1 BILANGAN ............................................................................ 125
14.1.1 Mencetak Bilangan Desimal......................................... 126
14.1.2 Mencetak Bilangan Heksadesimal................................ 129
14.2 OPERASI PENAMBAHAN........................................................ 132
14.3 OPERASI PENGURANGAN ...................................................... 135
14.4 OPERASI PERKALIAN ............................................................ 137
14.5 OPERASI PEMBAGIAN ........................................................... 138
Bagian 15 Operasi File .................................................................. 141
Bagian 16 String............................................................................. 152
Bagian 17 Grafik Pada Assembly................................................. 157
17.1 GRAFIK TITIK PIXEL ............................................................. 157
17.2 GRAFIK GARIS LURUS .......................................................... 159
17.3 GRAFIK HURUF DENGAN GARIS LURUS ............................... 162
17.4 GRAFIK TABEL BINER........................................................... 165
17.5 GRAFIK TABEL BINER DENGAN KONTROL KEYBOARD ....... 171
Bagian 18 Interrupt Yang Sering Digunakan ............................. 177
18.1 INTERRUPT 21H (DOS SERVICE)............................................. 177
Int 21h / Ah=1h........................................................................ 177
Int 21h / Ah=2h........................................................................ 177
Int 21h / Ah=5h........................................................................ 177
Int 21h / Ah=6h........................................................................ 178
Int 21h / Ah=7h........................................................................ 179
Int 21h / Ah=9h........................................................................ 179
Int 21h / Ah=0ah...................................................................... 180
Int 21h / Ah=0bh...................................................................... 180
Int 21h/ Ah=0ch....................................................................... 180
Int 21h/ Ah= 19h...................................................................... 181
Int 21h/ Ah=2ah....................................................................... 181
Int 21h/ Ah= 39h...................................................................... 182
Int 21h/ Ah= 3ah...................................................................... 182
Int 21h/ Ah= 3bh...................................................................... 183
Int 21h/ Ah= 3ch...................................................................... 183
Indra Gunawan, ST., M.Kom., CEH., CHFI
7
Int 21h/ Ah=3dh....................................................................... 184
Int 21h/ Ah= 3fh ...................................................................... 184
Int 21h/ Ah= 3eh...................................................................... 185
Int 21h/ Ah= 40h...................................................................... 186
Int 21h/ Ah= 41h...................................................................... 187
Int 21h/ Ah= 42h...................................................................... 187
Int 21h/ Ah= 47h...................................................................... 188
Int 21h/ Ah=4ch....................................................................... 189
Int 21h/ Ah= 56h...................................................................... 189
18.2 INTERRUPT 10H (GRAPHIC MODE )........................................ 190
18.3 INTERRUPT 16H (KEYBOARD SERVICE)................................... 201
18.4 INTERRUPT 19H (REBOOT) .................................................... 202
18.5 INTERRUPT 1AH/AH=00H (KOMPUTER TIME).................... 202
18.6 INTERRUPT 20H (END PROGRAM)...................................... 203
Daftar Pustaka ............................................................................... 204
Pemrograman Assembly Mikroprosesor 8086
8
Bagian 1 Perkembangan Mikroprosesor
Mikroprosesor atau sering disingkat dengan
prosesor adalah produk dari pengembangan komputer
era sebelumnya yang masih bersifat mekanis dan
berukuran besar. Era mikroprosesor menandai
diawalinya komputer berukuran kecil (komputer),
mikroprosesor – mikroprosesor tersebut diantaranya
dapat dilihat pada Tabel 1 berikut ini :
Tabel 1 Perkembangan mikroprosesor (Brey, 2009).
No Seri Penjelasan
1 Intel 4004  Rilis tahun 1946
 4 bit
 50.000 instruksi per detik
 Dikembangkan selanjutnya
menjadi seri Intel 4040
dengan penambahan
kecepatan.
2 Intel 8008  Rilis tahun 1971
 8 bit
 16K byte memori
3 Intel 8080  Rilis tahun 1973
 8 bit
 64K byte memori
 500,000 instruksi per detik
4 Intel 8085  Rilis tahun 1977
 8 bit
 769,230 instruksi per detik
5 Intel 8086  Mikroprosesor modern
pertama.
 16 bit
 2,5 juta instruksi per detik
Indra Gunawan, ST., M.Kom., CEH., CHFI
9
No Seri Penjelasan
 Mampu mengalamatkan
1024K byte memori
 Dikembangkan selanjutnya
menjadi seri Intel 8080
dan 80286.
6 Intel 80386  Rilis tahun 1986
 32 bit
 4 Gigabyte memori
7 Intel 80486  Rilis tahun 1989
 32 bit
 Kecepatan 50Mhz
8 Intel
80586/Pentium
 Rilis tahun 1993
 Multi Core
 32 bit
 4 Gigabyte memori
 Kecepatan lebih dari 3GHz
 Dikembangkan menjadi
banyak seri yaitu Pentium
II, Pentium III, Pentium IV,
Core2
9 Itanium  Rilis tahun 2002 gabungan
antara perusahaan Intel
dan Hewlett-Packard
 Multi Core
 64 bit
 1 Tbyte Memori
 Dikembangkan menjadi
banyak seri Itanium 2,
Itanium 9300, 9500, 9700
Pemrograman Assembly Mikroprosesor 8086
10
Bagian 2 Komponen Dasar Mikroprosesor
Mikroprosesor 8086 merupakan mikroprosesor
modern pertama yang menjadi dasar arsitektur
mikroprosesor selanjutnya, oleh karena itu seri 8086
inilah yang akan dipelajari di jurusan komputer dan
turunannya. Gambar 1 menunjukkan bentuk fisik
mikroprosesor 8086.
Gambar 1 Mikroprosesor 8086 (General Software, 1998)
2.1 Arsitektur Mikroprosesor 8086
Arsitektur internal mikroprosesor 8086 terbagi
menjadi 2 unit yaitu BIU(Bus Interface Unit) dan
EU(Execution Unit).
Indra Gunawan, ST., M.Kom., CEH., CHFI
11
Gambar 2 Skema Diagram Mikroprosesor 8086 (S. P. Das,
2019)
2.1.1 Bus Interface Unit
Bus Interface Unit (BIU) secara umum mempunyai
tugas :
 Mengirim tugas ke bagian lain .
 Mengambil instruksi dari memori.
 Membaca/menulis perintah dari dan ke memori dan port.
 Dapat dikatakan tugas BIU adalah pengalamatan dan transfer
data.
Komponen-komponen BIU adalah sebagai berikut :
1. Bus
Adalah jalur data tempat mengalirnya instruksi dan data antar
komponen.
2. Queue
Pada dasarnya queue adalah kumpulan register yang
berukuran 6 byte (1 byte=8bit) yang bertugas sebagai pintu antrian
Pemrograman Assembly Mikroprosesor 8086
12
perintah sebelum masuk ke ALU. Queue akan terisi kembali dengan
perintah dari BIU ketika isinya telah berkurang sebanyak 2byte/16bit
karena masuk ke ALU.
Mengapa harus ada queue ? Pada dasarnya memori
lebih lambat daripada mikroprosesor sehingga untuk
mempercepat proses pengiriman data antara memori dan
mikroprosesor/mengurangi gap antar keduanya maka
dibuatlah queue (media penyimpanan kecil) yang terletak
di dalam mikroprosesor yg tugasnya sebagai media
simpan sementara.
3. Segment Register
Register sendiri adalah komponen penting
mikroprosesor yang berupa memori kecil sebesar 16bit
tiap-tiap registernya. Secara umum dapat dikatakan
tugas register adalah menyimpan nilai yang diambil dari
memori yang akan dieksekusi oleh ALU.
Segment Register adalah salah satu dari register yang
fungsinya menyimpan alamat memori fisik berupa
segment address, terdapat 4 segment register yaitu :
 Code segment (CS) register
 Stack segment (SS) register
 Extra segment (ES) register
 Data segment (DS) register
Keempat segment register tersebut mewakili alamat
segment memori yang terdiri dari (Code segment, data
segment, extra segment dan stack segment) yang dibagi-
bagi lagi menjadi 16 logical segment yang tiap
segmentnya berukuran 64 KByte.
4. Instruction Pointer
Indra Gunawan, ST., M.Kom., CEH., CHFI
13
Adalah register 16 bit yang fungsinya menampung
offset address memori fisik. Gabungan antara offset
address dan segment address dari segment register akan
menunjukkan posisi alamat fisik dalam memori.
Contoh perhitungannya sebagai berikut :
segment address - 1005H
Offset address - 5555H
segment address - 1005H - 0001 0000 0000 0101
Digeser 4-bit - 0001 0000 0000 0101 0000
+
Offset address - 0101 0101 0101 0101
Physical address - 0001 0101 0101 1010 0101
1 5 5 A 5
Maka alamat fisik memorinya adalah 155A5H
2.1.2 Execution Unit
Execution Unit (EU) secara umum mempunyai tugas :
 Menerjemahkan perintah dari BIU
 Mengeksekusi perintah dari BIU
 Memberitahu BIU dari mana mengambil instruksi atau data.
Komponen-komponen EU adalah sebagai berikut :
1. Arithmetic Logic Unit
ALU (Arithmetic Logic Unit) adalah komponen inti
dari mikroprosesor atau disebut otaknya komputer.
Tugas ALU adalah mengeksekusi perintah yang
berhubungan dengan aritmatika dan logika yaitu
meliputi operasi-operasi : +,-,×,/ OR, AND, NOT
2. Flags
Flags atau disebut flag register adalah salah satu
register yang berfungsi menyimpan penandaan hasil
operasi yang dikerjakan ALU, misalnya adalah
menyimpan penandaan bahwa hasil operasi yang saat
Pemrograman Assembly Mikroprosesor 8086
14
ini dikerjakan ALU adalah genap, ganjil, nol dan lain-
lain.
Flag register terdiri dari 9 bit yaitu :
 Carry Flag : Berfungsi untuk menandai hasil operasi yang
melebihi lebar general purpose register. Misalnya digunakan
register 8 bit AL dan BH, dijumlahkan ternyata hasilnya 9 bit,
maka operasi ini ditandai dengan 1 di carry Flag, sedangkan 1 bit
sisanya disimpan di General purpose Register. Flag ini untuk
menandai bilangan unsigned (tidak bertanda/bilangan positif
saja).
 Overflow Flag : sama seperti carry flag, tetapi untuk bilangan
signed (bertanda/bilangan positif negatif).
 Auxiliary Flag : Bernilai 1 jika operasi ALU pada 4 bit rendah
melakukan operasi meminjam bit sebelah kirinya, dan bernilai 0
jika tidak.
 Zero Flag : Bernilai 1 jika operasi ALU hasilnya nol, bernilai 0 jika
operasi tidak nol.
 Parity Flag: Bernilai 1 jika operasi ALU hasilnya genap, dan
bernilai 0 jika ganjil.
 Direction Flag : Bernilai 1, maka operasi ALU berjalan mundur,
bernilai 0 berjalan maju.
 Sign Flag : Bernilai 1 jika operasi ALU negatif, bernilai 0 jika
positif.
 Trap Flag : Untuk menandai proses debugging, bernilai 1 maka
interrupt dilakukan dari device external.
 Interrupt flag : Untuk menandai pengaktifan interrupt, bernilai 1
jika aktif, bernilai 0 jika tidak aktif.
Indra Gunawan, ST., M.Kom., CEH., CHFI
15
3. Operand
Operand adalah data yang dioperasikan, operand bisa
berupa nilai, register, variabel.
Contoh : Operasi ADD AL, 5h
Pada operasi diatas, ADD adalah opcode, AL dan 5h
adalah operand.
4. Instruction Decoder and Control
Adalah komponen yang bertugas mengontrol ALU
lintas antar komponen ALU, BIU dan memori sekaligus
mendecode perintah dari BIU untuk diberikan ke ALU.
5. General purpose Register
Adalah register yang dapat diisi nilai untuk dioperasikan.
General purpose register dibagi menjadi 4 register 16 bit,
yang terbagi-bagi lagi menjadi 8 bit high dan 8 bit low.
Jika pada program ditulis mode 38086 dapat digunakan
register 32bit. Register-register tersebut yaitu :
 32-bit register (EAX, EBX, ECX, EDX, ESI, EDI, ESP, dan EBP).
 16- register (AX, BX, CX, DX, SI, DI, SP, dan BP).
 8-bit register (AH, BH, CH, DH, AL, BL, CL, dan DL)
Penggunaan register ini berbeda-beda caranya
tergantung operasi interrupt dan service yang digunakan
(Intel, 1998).
6. Index Register dan Pointer Register
Adalah register terdiri dari 4 register yaitu :
 Stack Pointer : Register 16 bit yang berisi alamat offset stack
pada stack segment di memori.
 Base Pointer : Register 16 bit yang berisi alamat offset data pada
stack segment di memori.
 Source Index : Register 16 bit yang berisi alamat sumber pada
operasi string.
Pemrograman Assembly Mikroprosesor 8086
16
 Destination Index : Register 16 bit yang berisi alamat tujuan
pada operasi string.
Indra Gunawan, ST., M.Kom., CEH., CHFI
17
Bagian 3 Interupsi
Interupsi atau interrupt adalah sinyal yang
digunakan sebagai metode untuk menghentikan
sementara pekerjaan yang sedang dikerjakan
mikroprosesor untuk melakukan pekerjaan yang sedang
diinterupsikan. Prinsipnya mirip seperti sekelompok
orang yang sedang rapat membahas suatu hal kemudian
ada seseorang yang melakukan interupsi, maka
pembicaraan rapat terhenti dan beralih sementara
menuju orang yang sedang menginterupsi, setelah
selesai dengan orang tersebut maka pembahasan beralih
kembali ke pembicaraan rapat semula.
Interrupt terbagi menjadi dua yaitu hardware
interrupt dan software interrupt.
1. Hardware interrupt adalah jenis interrupt yang berasal dari
perangkat keras. Ketika suatu device mengirim sinyal interrupt ke
pin NMI dan INTR pada mikroprosesor maka mikroprosesor akan
menghentikan pekerjaannya sementara dan akan mengeksekusi
perintah dari device yang diinterupsikan.
2. Software interrupt adalah jenis interrupt yang berasal dari
perangkat lunak. Terdapat 256 software interrupt yang memiliki
kode 0 sampai 255 yang setiap kodenya khusus untuk melakukan
suatu pekerjaan tertentu. DOS interrupt dan BIOS interrupt
termasuk dalam interrupt jenis ini, selanjutnya buku ini akan
lebih banyak membahas software interrupt karena erat
kaitannya dengan bahasa assembly.
Pemrograman Assembly Mikroprosesor 8086
18
3.1 BIOS Interrupt
Adalah fasilitas interrupt untuk menghubungkan
antara sistem operasi, program aplikasi, DOS dengan
BIOS. Umumnya interrupt ini dipakai ketika suatu
perangkat lunak membutuhkan hubungan dengan
perangkat keras. Tabel 1 adalah daftar BIOS interrupt.
Tabel 2 Daftar BIOS interrupt (General Software, 1998)
Interrupt Type Function or Service
00h CPU Divide by zero trap
01h CPU Single-step trap
02h CPU NMI interrupt
03h CPU Breakpoint trap (INT 3)
04h CPU Arithmetic overflow trap
05h CPU Array bounds exception
06h CPU Invalid Opcode Trap
07h CPU Device Not Available Trap
08h IRQ0 18.2 Hz Timer Tick
09h IRQ1 Keyboard
0ah IRQ2 Cascaded toPIC 2
Interrupt Type Function or Service
0bh IRQ3 COM2 Serial Port
0ch IRQ4 COM1 Serial Port
0dh IRQ5 LPT2 Parallel Port
0eh IRQ6 Floppy Disk Controller
0fh IRQ7 LPT1 Parallel Port
10h Service Video Services
11h Service Equipment List Service
12h Service Low Memori Size Service
Indra Gunawan, ST., M.Kom., CEH., CHFI
19
13h Service Floppy/IDE/ROM/Remote
Disk Services
14h Service Serial Port Services
15h Service General Services, Up-Calls
16h Service Keyboard Services
17h Service Parallel Port Services
18h Up-
Call
Boot Fault Up-Call
19h Up-
Call
Bootstrap Up-Call
1ah Service Date/Time Services
1bh Up-
Call
Control-Break Up-Call
1ch Up-
Call
18.2 Hz Application Timer Up-
Call
1dh Table Pointer to Video Control Param
Table
1eh Table Pointer to Diskette Parameter
Table
1fh Table Pointer to Video Graphics
Table
Interrupt Type Function or Service
20h-3fh DOS -- reserved by DOS --
40h Redire
ctor
Floppy disk services redirected
by IDE
41h Table Fixed Disk Parameter Table
(Drive 80h)
42h Extens
ion
EGA Default Video Driver
43h Extens
ion
Video Graphics Characters
Pemrograman Assembly Mikroprosesor 8086
20
44h-45h N/A -- not used --
46h Table Fixed Disk Parameter Table
(Drive 81h)
47h-49h N/A -- open --
4ah Up-
Call
User Alarm
4bh-6fh N/A -- open --
70h IRQ8 Real-Time Clock Interrupt (1
Khz)
71h IRQ9 -- open --
72h IRQ10 -- open --
73h IRQ11 -- open --
74h IRQ12 PS/2 Mouse
75h IRQ13 Math Coprocessor
76h IRQ14 IDE Drive Controller
77h IRQ15 APM Suspend Request
78h-ffh N/A -- open --
3.2 DOS Interrupt
Adalah interrupt yang input dan outputnya
memakai aplikasi DOS. DOS interrupt berasal dari
perangkat lunak yang membutuhkan output pada DOS.
Sebagian DOS interrupt dapat dilihat pada table 2
dibawah ini. Contoh kode program penggunaan masing-
masing interrupt pada Tabel 2 dapat dilihat pada Bagian
15.
Indra Gunawan, ST., M.Kom., CEH., CHFI
21
H Description AH Description
1
Read
character
from STDIN
2
Write
character to
STDOUT
5
Write
character to
printer
6
Console
Input/Output
7
Direct char
read (STDIN),
no echo
8
Char read
from STDIN,
no echo
9
Write string to
STDOUT
0A Buffered input
H Description AH Description
0B
Get STDIN
status
0C
Flush buffer
for STDIN
0D Disk reset 0E
Select default
drive
Tabel 3 DOS interrupt
Pemrograman Assembly Mikroprosesor 8086
22
19
Get current
default drive
25
Set interrupt
vector
2A
Get system
date
2B
Set system
date
2C
Get system
time
2D
Set system
time
2E Set verify flag 30
Get DOS
version
35
Get Interrupt
vector
H Description AH Description
36
Get free disk
space
39
Create
subdirectory
3A
Remove
subdirectory
3B
Set working
directory
3C Create file 3D Open file
Indra Gunawan, ST., M.Kom., CEH., CHFI
23
Pemrograman Assembly Mikroprosesor 8086
24
Bagian 4 Memulai Assembly
4.1 Kode Editor
Bahasa assembly dapat diketik pada beragam
aplikasi text editor seperti notepad, wordpad, notepad++,
sublime maupun langsung pada aplikasi emulator 8086
seperti DOSBOX atau emu8086. Buku ini akan
menggunakan emu8086 sebagai editornya dengan
pertimbangan kepraktisan.
Gambar 3 Editor Emu8086.
4.2 Menjalankan Program DOSBOX
Terdapat dua cara untuk mengkompilasi dan
menjalankan program assembly, cara pertama dengan
cara manual menggunakan DOSBOX, cara kedua
otomatis menggunakan emu8086.
Langkah-langkah menggunakan DOSBOX emulator
1. Instal DOSBOX
2. Ekstrak 8086.zip ke c:/8086
3. Klik DOSBOX option, lihat gambar 4
Indra Gunawan, ST., M.Kom., CEH., CHFI
25
Gambar 4 DOSBOX option
4. Ketik mount c: c:/8086 pada file config DOSBOX, kemudian
simpan, lihat gambar 5.
Gambar 5 Konfigurasi DOSBOX Option.
5. Jalankan aplikasi DOSBOX
Pemrograman Assembly Mikroprosesor 8086
26
6. Ketikkan
c:
7. kemudian enter, lalu ketik
edit
Kemudian enter, akan muncul editor untuk mengetik
kode assembly, ketikkan kode program assembly anda
seperti pada gambar 6
Gambar 6 DOSBOX editor.
8. Untuk menyimpan, ketika alt+f, kemudian pilih save, beri nama
pertama.asm lalu tekan enter, tekan lagi alt+f, pilih exit.
9. Untuk berpindah antar jendela windows dan DOSBOX gunakan
alt+tab.
10. Untuk menjalankan program, ketikkan perintah-perintah seperti
dibawah ini
Tasm pertama.asm
Tlink pertama.obj
Indra Gunawan, ST., M.Kom., CEH., CHFI
27
Pertama.exe
Gambar 7 Melakukan kompilasi kode menjadi exe
11. Untuk melakukan debug memori ketikkan
Debug pertama.exe
d
Gambar 8 Debugging dengan memori
12. Untuk melakukan debug register ketikkan
Pemrograman Assembly Mikroprosesor 8086
28
t
secara berulang-ulang sampai baris program habis.
Gambar 9 Debugging dengan Register
4.3 Menjalankan Aplikasi Emu8086
Buku ini untuk selanjutnya akan selalu
menggunakan aplikasi emu8086 sebagai editornya.
Untuk memulai aplikasi emu8086 lakukan langkah-
langkah sebagai berikut :
1. Untuk memulai aplikasi, klik new.
2. Ketikkan kode program pada area putih. Perlu diperhatikan
bahwa Emu8086 tidak membedakan huruf besar kecil.
3. Untuk menjalankan program klik emulate kemudian klik run.
Indra Gunawan, ST., M.Kom., CEH., CHFI
29
Gambar 10 Memulai aplikasi Emu8086
4.3 Debugging dengan Emu8086
Salah satu kelebihan aplikasi Emu8086 dibanding
DOSBOX adalah ketika melakukan debugging, kita dapat
melihat semua bagian secara paralel baik itu debug
memori, debug register, debug flag, debug variable,
maupun debug stack. Langkah-langkah untuk
melakukan debugging adalah sebagai berikut :
1. Untuk melakukan debug dengan melihat isi register klik emulate,
klik menu debug kemudian klik menu single step berkali-kali
sampai kode program sampai akhir, seperti gambar 11.
1
2
Pemrograman Assembly Mikroprosesor 8086
30
Gambar 11 Debug register dengan Emu8086.
2. Untuk melakukan debug dengan melihat isi memori klik emulate,
klik menu aux -> memori, ganti kolom segment dan offset
(0700:0109) sesuai keinginan kemudian pilih update seperti
gambar 12.
1
2
3
Indra Gunawan, ST., M.Kom., CEH., CHFI
31
Gambar 12 Debug memori dengan Emu8086
4.4Struktur Kode Assembly
Struktur kode assembly yang dibahas dibawah ini
adalah struktur kode inti untuk menjalankan assembly,
masih banyak sintak-sintak assembly yang bisa anda
pelajari sendiri untuk menjadi lebih expert.
.model small
Org 100h
.code
label1:
; Tulis kode program disini
End label1
.data
; Tulis data disini
1
2
Pemrograman Assembly Mikroprosesor 8086
32
4.4.1 Sintak .MODEL
Sintak ini berhubungan dengan penggunaan
memori yang akan digunakan oleh assembly (S’to, 2001).
Terdapat beberapa tipe .model yang dapat digunakan
yaitu :
.MODEL TINY : Hanya dapat digunakan 1 segment
(program com)
.MODEL SMALL : Kode dan Program < 64kb
.MODEL MEDIUM : Program < 64kb, kode > 64kb
.MODEL COMPACT : Program > 64kb, kode < 64kb
.MODEL LARGE : Program dan kode > 64kb
.MODEL HUGE : Program, kode dan array > 64kb
4.4.2 Sintak ORG 100H
Adalah perintah yang digunakan pada assembly
untuk memesan tempat pada memori sejumlah 100H
(256byte).
4.4.3 Sintak .CODE
Adalah perintah yang digunakan untuk menandai
bahwa kode-kode perintah dibawahnya adalah kode
program (bukan data).
4.4.4 Sintak .DATA
Adalah perintah yang digunakan untuk menandai
bahwa kode-kode perintah dibawahnya adalah data
(bukan kode program).
4.4.5 Sintak Label
Adalah perintah yang digunakan untuk
mengelompokkan kode-kode program sehingga dapat
digunakan untuk lompatan, perulangan dan lainnya.
Dalam satu program dapat digunakan banyak label
dengan nama bebas.
Indra Gunawan, ST., M.Kom., CEH., CHFI
33
Bagian 5 Transfer Data
Bagian ini akan membahas perintah-perintah
assembly yang berkaitan dengan bagaimana
mikroprosesor 8086 melakukan transfer data. Transfer
data tersebut dapat berupa transfer antar register atau
register ke memori. Metode transfer data tersebut atau
biasa disebut dengan mode pengalamatan akan dibahas
di Bagian yang lain. Perintah-perintah yang akan
dibahas pada Bagian ini yaitu :
 MOV
 LOAD EFFECTIVE ADDRESS
 LOAD SEGMENT REGISTER
 EXCHANGE
 BYTE SWAP
 COMPARE
 TRANSLATE
 CONVERT
(Cavanagh, 2013).
5.1 MOV
MOV adalah perintah untuk menyalin data dari
register ke register, register ke memori dan memori ke
register. Format perintah MOV adalah :
MOV Tujuan, Sumber
Tujuan dan sumber dapat berupa register atau
alamat memori. Cara berbagai macam pengalamatan
dengan perintah MOV dapat dilihat pada Bagian mode
pengalamatan. Contoh penggunaan perintah MOV dapat
dilihat pada program #1 dibawah ini :
Pemrograman Assembly Mikroprosesor 8086
34
; Program #1
.MODEL SMALL
ORG 100h
.CODE
MOV AX,0107H
MOV [0108],03H
MOV AL,A
MOV AX,OFFSET A
MOV AL,[0118]
MOV BX,0106H
MOV DL, BYTE PTR [BX]
.DATA
A DB 'Coba'
Penjelasan :
 MOV AX,0107H: Salin 0107H ke register AX
 MOV [0108],03H : Salin 03H ke alamat 0108H
 MOV AL,A : Salin karakter pertama pada varibel A ke register AL.
 MOV AX,OFFSET A : Salin alamat offset A ke register AX
 MOV AL,[0118] : Salin isi alamat 0118H ke register AL
 MOV BX,0106H : Salin 0106H ke register BX
 MOV DL, BYTE PTR [BX] : Salin isi alamat offset pada register BX
sebanyak 1 byte ke register DL
5.2 Load Effective Address
Load effective address adalah perintah untuk
menyalin alamat offset ke suatu target operand, target
operand dapat berupa register atau alamat memori.
Format perintah Load effective address adalah :
LEA Tujuan, Sumber
Indra Gunawan, ST., M.Kom., CEH., CHFI
35
Perintah LEA dapat dilakukan juga dengan MOV
dengan tujuan dan hasil yang sama dengan format
berikut ini.
LEA Tujuan, Sumber
MOV Tujuan, Offset Sumber
Contoh penggunaan perintah LEA dapat dilihat
pada program #2 dibawah ini :
; Program #2
.MODEL SMALL
ORG 100h
.CODE
LEA AX, A
MOV AX, OFFSET A
.DATA
A DB 'Coba'
Penjelasan : Dimisalkan alamat offset variabel A =
0108H, maka perintah LEA dan MOV diatas
menghasilkan AX=0108H.
5.3 Load Segment Register
Load segment register adalah perintah untuk
menyalin isi segment register ke general purpose register.
Variasi perintah ini ada dua macam yaitu LDS (Load
data segment) dan LES (Load extra segment).
LDS Tujuan, Sumber
LES Tujuan, Sumber
MOV Tujuan, Offset Sumber
Contoh penggunaan perintah LDS dan LES dapat
dilihat pada program #3 dibawah ini :
; Program #3
.MODEL SMALL
.CODE
LDS AX, A
LES DX, A
.DATA
A DB 'Coba'
Pemrograman Assembly Mikroprosesor 8086
36
5.4 Exchange
Exchange adalah perintah untuk menukar data
antar operand, operandnya dapat berupa register
maupun memori. Format perintah exchange adalah :
XCHG Tujuan, Sumber
XCHG register/memori, register/memori
Contoh penggunaan perintah exchange dapat
dilihat pada program #4 dibawah ini :
; Program #4
.MODEL SMALL
ORG 100H
.CODE
MOV BX, OFFSET X
MOV AX,05H
MOV DX,08H
XCHG AX,DX
XCHG [0110H], AX
.DATA
X DB 'Coba'
Indra Gunawan, ST., M.Kom., CEH., CHFI
37
Gambar 13 Diagram alir program #4 (exchange).
Penjelasan :
 Offset variabel A adalah 0110H, AX=05H, BX=08H.
 Perintah XCHG AX, DX menghasilkan perpindahan data register
AX dengan register DX, AX=08H, BX=05H.
 Perintah XCHG [0110H], AX menghasilkan perpindahan data isi
alamat offset [0110H] dengan register AX, maka AX=6F43(String
Pemrograman Assembly Mikroprosesor 8086
38
‘Co’), alamat [0110H] =(08 00 62 61) H, jika dikonversi menjadi
string adalah ‘..ba’.
5.6 Compare
Compare adalah perintah assembly untuk
membandingkan dua operand. Perintah ini tidak akan
mengubah kedua operand tersebut, yang berubah nilai
dari perintah compare adalah flag register. Flag register
yang berubah tergantung perintah yang mengikuti
compare. Format perintah compare adalah sebagai
berikut :
CMP Sumber1, Sumber2
Sumber1 dan sumber2 dapat berupa register, memori
maupun nilai.
CMP register/memori/nilai,
register/memori/nilai
Contoh penggunaan perintah compare dapat
dilihat pada program #5 dibawah ini :
; Program #5
.MODEL SMALL
ORG 100H
.CODE
MOV AX,05H
MOV DX,08H
CMP AX,DX
CMP AX,06H
CMP [0112H], 07H
.DATA
X db 'Coba'
Indra Gunawan, ST., M.Kom., CEH., CHFI
39
Gambar 14 Diagram alir program #5 (compare).
5.7 Translate
Translate adalah perintah pada assembly untuk
menyalin isi data pada alamat data segment ke register
AL. Untuk melakukan uji coba perintah ini, isilah
terlebih dahulu register BX, lalu isilah alamat DS:[BX]
dengan nilai tertentu, akhirnya lakukan perintah XLATB.
Dengan cara ini dapat ditelusuri dengan mudah bahwa
nilai 77H disalin dari alamat memori 0119H ke register
AL.
Contoh penggunaan perintah XLATB dapat dilihat
pada program #6 dibawah ini :
; Program #6
.MODEL SMALL
ORG 100H
Pemrograman Assembly Mikroprosesor 8086
40
.CODE
MOV BX,0119H
MOV DS:[BX],77H
XLATB
Gambar 15 Diagram alir program #6 (translate).
Penjelasan :
 Isi alamat offset [0119H]=9090H
 Perintah BX, 0119H menghasilkan nilai BX=0119H.
Indra Gunawan, ST., M.Kom., CEH., CHFI
41
 Perintah DS:[BX],77H menghasilkan alamat offset
[0119H]=7790H
 Perintah XLATB menghasilkan register AL=77H
5.8 Convert
Convert Byte to Word (CBW)
CBW adalah perintah pada assembly yang
berfungsi untuk mengkonversi nilai register AL 8 bit
menjadi nilai 16 bit. Konversi tersebut berjalan dengan
cara menyalin keseluruhan nilai pada register AL ke
register AH sehingga nilai AL dan AH menjadi sama.
Convert Word to Double (CWD)
CWD adalah perintah pada assembly yang
berfungsi untuk mengkonversi nilai register AX 16 bit
menjadi nilai 32 bit. Konversi tersebut berjalan dengan
cara menyalin bit ke 15 register AX ke register DX, hasil
akhir bilangan 32bit adalah pasangan register DX:AX.
Contoh penggunaan perintah convert dapat
dilihat pada program #7 dibawah ini :
; Program #7
.MODEL SMALL
ORG 100H
.CODE
MOV AL,0FFH
CBW
MOV AX,-90D
MOV DX,77H
CWD
MOV AX,90D
CWD
Pemrograman Assembly Mikroprosesor 8086
42
MOV AL,0FFH
=
Register AL=0FFH
CBW
Register
AL=FFH
AH=FFH
AX=FFFFH
MOV AX,-90D
=
Register AX=FFA6H
MOV DX,77H
=
Register DX=77H
CWD
Register
AX=FFA6H
DX=0000H
MOV AX,90H
=
Register AX=005AH
CWD
Register
AX=005AH
DX=FFFFH
SELESAI
MULAI
Gambar 16 Diagram alir program #7 (CWD).
Penjelasan :
 Perintah CWB menyalain nilai AL ke AH, sehingga nilai AX=AH:AL.
 Perintah CWD, jika AX bilangan negatif maka nilai DX=0000H, jika
AX positif maka nilai DX=FFFFH.
Indra Gunawan, ST., M.Kom., CEH., CHFI
43
Bagian 6 Cetak Karakter Dan Kalimat
Bagian ini akan membahas tentang penggunakan
tiga interrupt yaitu INT 21H service 02H, INT 21H service
09H dan INT 10H service 1300H. Ketiga interrupt
tersebut beserta service nya dapat digunakan untuk
mencetak karakter ke layar.
Karakter yang dicetak dapat berasal dari string
yang didalam program maupun dari input keyboard,
tetapi dalam Bagian ini hanya membahas mencetak
karakter dengan string berada didalam program.
6.1 Cetak satu karakter (INT 21H/AH=02H)
Mencetak satu karakter ke layar tanpa warna
dapat digunakan INT 21h service 02H. Untuk
menggunakan interrupt ini caranya sangatlah mudah.
Pertama isi register AH dengan nilai 2 heksadesimal,
kedua isi register DL dengan string yang akan dicetak,
ketiga lakukan INT 21H. Perlu diperhatikan bahwa
register DL besarnya 8 bit maka hanya dapat
menampung satu karakter saja. Kode program
selengkapnya dapat dilihat pada program #8 dibawah ini.
; Program #8
.MODEL SMALL
org 100h
.CODE
mov ah, 02h
mov dl, 'A'
int 21h
int 20h
Pemrograman Assembly Mikroprosesor 8086
44
Gambar 17 Diagram alir program #8 (cetak 1 karakter).
Penjelasan : Tercetak string ‘A’.
 AH = nilai service
 DL = string yang akan dicetak
6.2 Cetak banyak karakter (INT 21H/AH=02H)
Mencetak banyak karakter ke layar tanpa warna
dapat digunakan INT 21h service 02H dengan cara
diulang-ulang perintah interruptnya sebanyak karakter
yang diinginkan, tetapi perlu diingat bahwa isi register
DL harus diganti-ganti sesuai string yang akan dicetak.
Kode program selengkapnya dapat dilihat pada program
#9 dibawah ini.
; Program #9
.MODEL SMALL
org 100h
.CODE
Indra Gunawan, ST., M.Kom., CEH., CHFI
45
mov ah,02h
mov dl, 'A'
int 21h
mov dl,10
int 21h
mov dl,13
int 21h
mov dl, 'B'
int 21h
int 20h
Pemrograman Assembly Mikroprosesor 8086
46
Gambar 18 Diagram alir program #9(Cetak banyak
karakter).
Penjelasan : Akan tercetak huruf A kemudian B
dibawahnya.
Indra Gunawan, ST., M.Kom., CEH., CHFI
47
6.3 Cetak Kalimat dsengan Perulangan (INT
21H/AH=02H)
Untuk mencetak kalimat/banyak karakter dengan
cara yang lebih elegan dan efisien adalah dengan
menggunakan perulangan. Cara menggunakannya
adalah letakkan perintah interrupt dalam suatu label,
kemudian buat perulangan dengan loop terhadap label
tersebut. Perlu anda perhatikan bahwa banyaknya
perulangan sesuai nilai register CX. Kode program
selengkapnya dapat dilihat pada program #10 dibawah
ini.
; Program #10
.MODEL SMALL
org 100h
.CODE
MOV AH,02h
MOV DL,'A'
MOV CX,03h
Cetak:
INT 21h
INC DL
LOOP Cetak
INT 20h
Pemrograman Assembly Mikroprosesor 8086
48
INT 21H
Cetak ‘A’
LOOP
Loop 3x
Register AH=2 Register DL=’A’ Register CX=3H
MULAI
SELESAI
Gambar 19 Diagram alir Program #10 (Cetak banyak
karakter + loop).
Penjelasan : Akan tercetak ‘ABC’.
6.4 Cetak Kalimat dengan Variabel (INT 21H/AH=09H)
Mencetak kalimat atau banyak karakter dengan INT
21H service 09H memiliki pendekatan alur yang berbeda
dengan program sebelumnya. Untuk menggunakan
service ini, pertama, isi register AH dengan 09H, kedua,
isi register DX dengan alamat offset variabel string
dengan perintah LEA atau MOV. Ketiga, buat
variabel/data terlebih dahulu. Variabel ini yang akan
menampung string yang akan dicetak. Jangan lupa
gunakan tipe data DB (1byte) pada variabel tersebut.
Kode program selengkapnya dapat dilihat pada program
#11 dibawah ini.
Indra Gunawan, ST., M.Kom., CEH., CHFI
49
; Program #11
.MODEL SMALL
org 100h
.CODE
MOV AH,09h
MOV DX,offset kal0
INT 21h
LEA DX,kal0
INT 21h
LEA DX,kal0+2
INT 21h
LEA DX,kal1
INT 21h
INT 20h
.DATA
kal0 DB 'Coba',13,10,'$'
kal1 DB 'SETELAH $ TIDAK BISA DICETAK '
Pemrograman Assembly Mikroprosesor 8086
50
Gambar 20 Diagram alir program #11(Cetak kalimat isi
variabel).
Penjelasan : Akan tercetak ‘Coba’, ‘ba’ dan ‘Setelah’.
Indra Gunawan, ST., M.Kom., CEH., CHFI
51
6.5 Cetak Kalimat Berwarna (INT 10H/AH=09H)
Untuk mencetak kalimat berwarna dapat digunakan
INT 10H service 09H, akan tetapi interrupt ini memiliki
kekurangan dibanding INT 10H service 1300H yaitu
tidak ada fitur tebal tipis huruf, tidak ada fitur tulisan
berkedip, dan warna yang dimiliki terbatas serta tidak
dapat memposisikan tulisan secara bebas pada layar.
Cara menggunakan interrupt ini adalah :
 AH = nilai service, 09H
 BL = atribut warna, 1 digit pertama warna tulisan, 1 digit sebelah
kanan warna latar.
 BH = halaman
 CX = banyaknya karaktar yang akan dicetak
Kode program selengkapnya dapat dilihat pada
program #12 dibawah ini.
; Program #12
.MODEL SMALL
ORG 100h
.CODE
MOV AH,09h
MOV AL,'A'
MOV BH,00h
MOV BL,95h
MOV CX,03h
INT 10h
INT 20h
Pemrograman Assembly Mikroprosesor 8086
52
Gambar 21 Diagram alir program #12 (cetak kalimat warna)
Penjelasan : Pada register BL, angka 9 adalah warna
background sedangkan angka 5 adalah warna font.
Register CX menentukan banyaknya karakter tercetak.
6.6 Cetak Kalimat Berwarna (INT 10H/AH=1300H)
Mencetak berwarna tidak dapat dilakukan oleh INT
21H, maka kita akan menggunakan INT 10H service
1300 H. Interupt ini dapat digunakan untuk mencetak
kalimat dengan warna latar dan font yang berwarna.
Untuk menggunakan interrupt ini ketentuannya adalah
sbb :
 AX = nilai service, 1300H
Indra Gunawan, ST., M.Kom., CEH., CHFI
53
 BL = atribut warna, 3 digit kiri adalah warna font, Red Green
Blue, 1 digit berikutnya untuk mengaktifkan tulisan kedip, 3 digit
berikutnya adalah warna latar. 1 digit paling kanan adalah
mengaktifkan tulisan tebal/tipis.
 DL = koordinat X
 DH =koordinat Y
 CX = banyaknya karaktar yang akan dicetak
 BP = menampung variabel kalimat
Kode program selengkapnya dapat dilihat pada
program #13 dibawah ini.
;Program #13
.MODEL SMALL
org 100h
.CODE
MOV AX,1300h
MOV BL,10010101b
MOV BH,00
MOV DL,20
MOV DH,12
MOV CX,08H
LEA BP,kal0
INT 10h
INT 20h
.DATA
kal0 DB 'Uji coba'
Pemrograman Assembly Mikroprosesor 8086
54
Gambar 22 Diagram alir program #13 (Cetak warna lanjutan)
Penjelasan : Tercetak ‘Uji coba’ dengan warna sesuai isi
register BL, pada halaman 0, baris ke 20 dan kolom ke
12. Konfigurasi properti register BL dapat dilihat pada
gambar 23 dibawah ini.
Indra Gunawan, ST., M.Kom., CEH., CHFI
55
Gambar 23 Konfigurasi INT 10H/AX=1300H (Cetak warna).
6.7 Cetak Kalimat Berwarna Real Time
6.7.1 Cetak 1 Karakter
Pada pembahasan sebelumnya, mencetak kelayar
pada pemrograman assembly selalu menggunakan
interrupt, tetapi perlu diketahui bahwa ada metode
lainnya untuk mencetak kelayar tanpa interrupt, Bagian
ini akan membahas bagaimana mencetak karakter
menggunakan memori layar. Kelebihan metode ini
adalah dapat menampilkan karakter ke layar secara real
time yaitu dapat merubah-rubah karakter pada posisi
koordinat x dan y yang sama (seperti animasi) baik
karakternya, warna tulisannya maupun warna latarnya.
Metode tanpa interrupt ini melibatkan alamat
memori pada segment ke 0B800H:offset, ketika data
pada alamat ini diganti-ganti melalui perulangan
misalnya, maka tampilan di layar juga akan berganti-
ganti seketika. Jadi metode ini cocok untuk membuat
animasi tulisan berbasis assembly.
Contoh penggunaan memori layar dan hasilnya
dapat dilihat pada program #14 dan gambar #24
dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
56
Gambar 24 Hasil tampilan program #14 (memori layar)
;Program #14
cetak macro x,y,kal,atr
MOV AX,0B800h
MOV ES,AX
MOV AH,Y
MOV AL,160
MUL AH
MOV BX,AX
MOV AH,X
MOV AL,2
MUL AH
ADD BX,AX
MOV AL,Kal
MOV AH,Atr
MOV ES:BX, AL
MOV ES:BX+1,AH
ENDM
;############### MACRO ###########
.MODEL SMALL
ORG 100h
.CODE
cetak 40 23 'A' 95
INT 20h
Indra Gunawan, ST., M.Kom., CEH., CHFI
57
Gambar 25 Diagram alir program #14 (memori layar)
6.7.2 Cetak Banyak Karakter
Untuk mencetak banyak karakter dengan memori
layar metodenya sama dengan satu karakter, caranya
Pemrograman Assembly Mikroprosesor 8086
58
adalah dengan mengulang-ulang metode cetak satu
karakter dengan mengubah-ubah parameter koordinat x,
y, warna, dan atribut.
Contoh penggunaan memori layar dan hasilnya
dapat dilihat pada program #15 dan gambar #26
dibawah ini.
Gambar 26 Hasil program #15 (memori layar)
;Program 15
.MODEL SMALL
ORG 100h
.CODE
cetak 40 15 'S' 95
cetak 41 15 'T' 97
cetak 42 15 'T' 65
cetak 40 17 'I' 23
cetak 41 17 'B' 35
cetak 42 17 'N' 63
cetak 43 17 'U' 58
cetak 40 19 'S' 14
cetak 41 19 'I' 37
cetak 42 19 'N' 33
cetak 43 19 'A' 48
INT 20h
6.7.3 Cetak animasi kalimat menggunakan memori
layar
Cetak animasi pada sub Bagian ini maksudnya
adalah, lihat gambar 27 terdapat tulisan ‘Yayasan Ibnu
Sina Batam’ dengan warna tulisan dan latar yang
berbeda-beda. Jika menggunakan mode interrupt 10H
maka hasilnya statis, tidak bisa berubah. Dengan
Indra Gunawan, ST., M.Kom., CEH., CHFI
59
memori layar seperti pada program #16 tulisan tersebut
akan terus berganti-ganti warna tulisan dan latarnya.
Gambar 27 Hasil program #16 (animasi memori layar).
;Program #16
Delay MACRO x
LOCAL Ulang
mov dx,0h
Ulang:
inc dx
cmp dx,x
je ulang
ENDM
cetak macro x,y,kal,atr
MOV AX,0B800h
; ES Menunjuk pada segment layar
MOV ES,AX
MOV AH,Y
MOV AL,160
; Hitung offset baris
MUL AH
; Simpan hasilnya pada BX
MOV BX,AX
MOV AH,X
MOV AL,2
; Hitung offset kolom
MUL AH
; Tambahkan hasilnya pada BX
ADD BX,AX
; AL=karakter yang akan ditampilkan
MOV AL,kal
; AH=Atribut yang akan ditampilkan
Pemrograman Assembly Mikroprosesor 8086
60
MOV AH,atr
; Tampilkan Karakter dan atributnya
MOV ES:BX,AL
; pada posisi kolom X dan baris Y
MOV ES:BX+1,AH
ENDM
;############### MACRO ###########
.MODEL SMALL
ORG 100h
.CODE
proses:
; Setiap selesai cetak kalimat, nol kan bx,
set ulang kolom ke 40d
xor bx,bx
mov ah,017h
mov kolom,ah
proses3:
; menyimpan nilai bx untuk dipakai lg
push bx
mov dl,var[bx]
cetak kolom baris dl warna
; isi bx dari stack
pop bx
; naikkan nilai warna
xor ah,ah
mov ah,warna
add ah,0Ah
mov warna,ah
; naikkan nilai kolom
xor ah,ah
mov ah,kolom
add ah,01h
mov kolom,ah
Indra Gunawan, ST., M.Kom., CEH., CHFI
61
; sleep program dgn loop sebanyak
1111x agar animasi terlihat
delay 0fffh
;naikkan nilai bx
inc bx
cmp bx,017H
push bx
je proses
loop proses3
loop proses
INT 20h
.DATA
jmp proses
var db 'Yayasan Ibnu Sina Batam'
warna db 0fh
kolom db 017h
baris db 0fh
Penjelasan : Program #15 ini mirip dengan program #14,
bedanya adalah ditambahkan delay sehingga perubahan
warna tulisan dan latar antar karakter tidak terlalu
cepat, selain itu digunakan perulangan yang bertujuan
untuk merubah-rubah warna tulisan dan warna latar
secara terus menerus.
6.8 Cetak Dari Input Keyboard
Pada Bagian ini kita akan membahas bagaimana
mencetak ke layar satu karakter dan banyak karakter
yang berasal dari ketikan keyboard. Metode ini bekerja
dengan cara menyimpan data ketikan keyboard pada
register AL dan variabel. Ada tiga metode pembacaan
keyboard menggunakan assembly yaitu :
 Interrupt 16H Service 0H untuk membaca ketikan keyboard tanpa
cetak ke layar.
Pemrograman Assembly Mikroprosesor 8086
62
 Interrupt 21H Service 01H untuk membaca ketikan keyboard
sekaligus cetak ke layar.
 Interrupt 21H Service 0AH untuk membaca ketikan keyboard
banyak karakter .
6.8.1 Baca 1 Karakter dengan INT 16H/AH=0H
Untuk membaca ketikan keyboard 1 karakter
maka digunakan Interrupt 16H service 0H, interrupt ini
hanya dapat membaca 1 karakter ketikan keyboard per
interrupt, jika ingin dilakukan pembacaan banyak
karakter, maka harus diulang-ulang interruptnya
menggunakan perulangan seperti pada contoh. Contoh
program interruptnya dapat dilihat pada program #17
dibawah ini.
;Program #17
.MODEL SMALL
ORG 100h
.CODE
satu:
mov AH,0H
INT 16h
LOOP satu
Indra Gunawan, ST., M.Kom., CEH., CHFI
63
Gambar 28 Diagram alir program #17 (INT 16H/AH=0H)
6.8.2 Baca 1 Karakter dengan INT 21H/AH=01H
Interrupt 21H service 1H hanya dapat membaca 1
karakter ketikan keyboard per interrupt, jika ingin
dilakukan pembacaan banyak karakter, maka harus
diulang-ulang interruptnya seperti pada contoh. Contoh
program interrupt ini ada pada program#18 dibawah ini.
;Program #18
.MODEL SMALL
ORG 100h
.CODE
satu:
mov AH,1H
INT 21h
LOOP satu
Pemrograman Assembly Mikroprosesor 8086
64
Gambar 29 Diagram alir program #18 (INT 21/AH=01H).
6.8.2 Baca Banyak Karakter
Metode pembacaan ketikan keyboard yang ketiga
ini melibatkan variabel dan interrupt 21H service 0AH.
Untuk memakai cara ini harus dibuat variabel array tiga
elemen untuk menyimpan hasil ketikan keyboard.
Contoh program dan penjelasannya dapat dilihat pada
program #19 dan gambar 30.
;Program #19
.MODEL SMALL
ORG 100h
.CODE
MOV AH,0AH
MOV DX,OFFSET var
INT 21H
.DATA
var DB 9,?,9 DUP(?)
Indra Gunawan, ST., M.Kom., CEH., CHFI
65
Gambar 30 Diagram alir program #19 (INT 21H/AH=0AH).
Penjelasan : Variabel kata memiliki 3 elemen
 Angka 9 paling kiri adalah 9 byte (9 karakter) maksimal yang bisa
ditampung.
 Tanda tanya ‘?’ akan terisi panjang karakter yang telah
diketikkan pada keyboard.
 Angka 9 paling kanan adalah 9 byte yang akan terisi karakter
yang telah diketikkan pada keyboard.
 Variabel kata ini akan terisi setelah pengguna menekan enter.
Pemrograman Assembly Mikroprosesor 8086
66
Bagian 7 Operasi Logika
Seperti pada umumnya bahasa pemrograman
lainnya, assembly juga dapat melakukan berbagai
operasi logika seperti AND, OR, XOR serta NOT.
Operator-operator logika tersebut dapat dimanfaatkan
dalam banyak hal. Contohnya dalam buku ini, operator
AND akan digunakan untuk menggambar grafik
(menemukan nilai 1 pada kumpulan angka biner),
operator XOR digunakan untuk membuat nol isi register,
operator NOT digunakan untuk menemukan lawan bit
dari suatu nilai, dan terakhir operator OR digunakan
untuk menemukan nilai 0 pada kumpulan angka biner.
7.1Operasi AND
Operasi AND adalah operasi yang bernilai TRUE jika
A dan B bernilai TRUE. Jika diterjemahkan kedalam
bilangan biner artinya adalah apabila kita mempunyai
dua variabel A dan B berisi bilangan biner dan dikenakan
operasi AND, maka hasilnya bernilai 1 jika dan hanya
jika A dan B bernilai 1, selain itu hasilnya 0. Untuk lebih
mudahnya dapat dilihat pada gambar 31 dibawah ini.
Gambar 31 Logika AND (Leiterman, 2010).
Untuk menggunakan operasi AND dalam assembly
silakan liat pada program #8 dibawah ini.
;Program #8
.MODEL SMALL
org 100h
.CODE
Indra Gunawan, ST., M.Kom., CEH., CHFI
67
MOV AH,01H
MOV BL,00H
AND AH,BL
Gambar 32 Diagram alir program #8 (operasi AND)
Penjelasan : Program diatas tidak memiliki output
sehingga untuk melihat hasilnya harus melalui debug
register (silakan lihat Bagian 4.3), hasil debug registernya
dapat dilihat pada debug #8 dibawah ini.
Debug #8
AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC
Pada awalnya nilai AH=00H, BL=00H.
0700:0100 B401 MOV AH, 01h
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC
Dengan perintah MOV AH, 01h maka nilai AH menjadi
01H (tulisan merah).
0700:0102 B300 MOV BL, 00h
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC
Pemrograman Assembly Mikroprosesor 8086
68
Dengan perintah MOV BL, 00h maka nilai BL menjadi
00H (tulisan merah).
0700:0104 22E3 AND AH, BL
AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0106 NV UP EI PL ZR NA PE NC
0700:0106 90 NOP
Dengan perintah AND AH,BL maka nilai AH menjadi 00H
(AH sebagai hasil).
7.2Operasi OR
Operasi OR adalah operasi yang bernilai TRUE jika A
atau B bernilai TRUE. Jika diterjemahkan kedalam
bilangan biner artinya adalah apabila kita mempunyai
dua variabel A dan B berisi bilangan biner dan dikenakan
operasi OR, maka hasilnya bernilai 1 jika A atau B
bernilai 1, dan hanya bernilai 0 jika A dan B bernilai 0.
Untuk lebih mudahnya dapat dilihat pada gambar 33.
Gambar 33 Logika OR (Leiterman, 2010).
Untuk menggunakan operasi OR dalam assembly
silakan liat pada program #9 dibawah ini.
;Program #9
.MODEL SMALL
org 100h
.CODE
MOV AH,01H
MOV BL,00H
OR AH,BL
Indra Gunawan, ST., M.Kom., CEH., CHFI
69
Gambar 34 Diagram alir program #9(Operasi OR)
Penjelasan : Program diatas tidak memiliki output
sehingga untuk melihat hasilnya harus melalui debug
register (silakan lihat Bagian 4.3), hasil debug registernya
dapat dilihat pada debug #9 dibawah ini.
Debug #9
AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC
Kondisi awal
0700:0100 B401 MOV AH, 01h
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC
Perintah MOV AH, 01H menjadikan AH = 01H.
Pemrograman Assembly Mikroprosesor 8086
70
0700:0102 B300 MOV BL, 00h
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC
Perintah MOV BL, 00H menjadikan BL = 00H.
0700:0104 0AE3 OR AH, BL
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0106 NV UP EI PL NZ NA PO NC
Perintah OR AH, BL menjadikan AH = 01H.
7.3Operasi XOR
Operasi XOR (Exclusive OR) adalah operasi yang
bernilai TRUE jika salah satu A atau B bernilai TRUE.
Jika diterjemahkan kedalam bilangan biner artinya
adalah apabila kita mempunyai dua variabel A dan B
berisi bilangan biner dan dikenakan operasi XOR, maka
hasilnya bernilai 1 jika salah satu A atau B bernilai 1,
dan hanya bernilai 0 jika A dan B sama-sama bernilai 0
atau sama-sama berniai 1. Untuk lebih mudahnya dapat
dilihat pada gambar 35.
Gambar 35 Operasi XOR (Leiterman, 2010).
Untuk menggunakan operasi XOR dalam assembly
silakan liat pada program #10 dibawah ini.
;Program #10
.MODEL SMALL
org 100h
.CODE
MOV AH,01H
MOV BL,00H
XOR AH,BL
Indra Gunawan, ST., M.Kom., CEH., CHFI
71
Gambar 36 Diagram alir program #10 (Operasi XOR)
Penjelasan : Program diatas tidak memiliki output
sehingga untuk melihat hasilnya harus melalui debug
register (silakan lihat Bagian 4.3), hasil debug registernya
dapat dilihat pada debug #10 dibawah ini.
Debug #10
AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC
Kondisi awal
0700:0100 B401 MOV AH, 01h
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC
Perintah MOV AH, 01h menjadikan AH=01H.
0700:0102 B300 MOV BL, 00h
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC
Perintah MOV BL, 00h menjadikan BL=00H.
0700:0104 32E3 XOR AH, BL
AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0106 NV UP EI PL NZ NA PO NC
Perintah XOR AH,BL menjadikan AH=01H.
Pemrograman Assembly Mikroprosesor 8086
72
7.4Operasi NOT
Operasi NOT adalah operasi lawan dari/negasi, jika
variabel A bernilai 0 maka NOT A bernilai 1, demikian
juga sebaliknya jika variabel A bernilai 1 maka NOT A
bernilai 0. Untuk lebih mudahnya dapat dilihat pada
gambar 37.
Gambar 37 Operasi NOT (Leiterman, 2010).
Untuk menggunakan operasi NOT dalam assembly
silakan liat pada program #11 dibawah ini.
;Program #11
.MODEL SMALL
org 100h
.CODE
MOV AH,01H
NOT AH
Gambar 38 Diagram alir program #11 (Operasi NOT)
Indra Gunawan, ST., M.Kom., CEH., CHFI
73
Penjelasan : Program diatas tidak memiliki output
sehingga untuk melihat hasilnya harus melalui debug
register (silakan lihat Bagian 4.3), hasil debug registernya
dapat dilihat pada debug #11 dibawah ini.
Debug #11
AX=0000 BX=0000 CX=0004 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC
Kondisi awal
0700:0100 B401 MOV AH, 01h
AX=0100 BX=0000 CX=0004 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC
Perintah MOV AH, 01H menjadikan AH=01H.
0700:0102 F6D4 NOT AH
AX=FE00 BX=0000 CX=0004 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC
Perintah NOT AH menjadikan AH=FEH.
Penyelesaian dengan bilangan biner
AH = 0000 0001 h
NOT AH = 1111 1110 h = FEh
Pemrograman Assembly Mikroprosesor 8086
74
BAGIAN 8 TIPE DATA
Tipe data penting dalam suatu bahasa
pemrograman, dengan adanya tipe data yang
disesuaikan dengan kebutuhan program yang akan
dibuat, maka program tersebut dapat menggunakan
space pada memori secara lebih efisien dan optimal serta
tidak membuang-buang space memori secara sia-sia.
Tipe data pada assembly terdiri dari 5
(Dandamudi, 2005) yaitu :
 DB (Define Byte) = 1 Byte
 DW (Define Word) = 2 Byte
 DD (Define DoubleWord) = 4 Byte
 DQ (Define Quadword) = 8 Byte
 DT (Define Ten Bytes)= 10 Byte
Perlu diketahui bahwa tipe data DQ dan DT tidak
dikenali oleh mikroprosesor 8086, karena kedua tipe
data tersebut baru muncul pada mikroprosesor versi
atasnya, maka emulator Emu8086 juga tidak dapat
mengenali tipe data tersebut, jika anda ingin tetap
mencoba tipe data tersebut, gunakan emulator lainnya
seperti TASM dan NASM atau DOSBOX. Untuk
memahami tipe data diatas, perhatikan program #12
dibawah ini beserta debugnya.
;Program #12
.MODEL SMALL
ORG 100H
.CODE
.DATA
Indra Gunawan, ST., M.Kom., CEH., CHFI
75
A DB 'z'
B DB 'Uji coba dengan kalimat'
C DB 3Ah
D DW 123Fh
E DD 98761234h
Penjelasan : Program #12 diatas tidak memiliki output
sehingga untuk melihat hasilnya harus melalui debug
memori (silakan lihat Bagian 4.3), hasil debug memori
dapat dilihat pada gambar 39 dibawah ini. Yang
bertanda merah merupakan data pada variabel A, B, C,
D, E dimana satu pasang nilai misalnya 55H (huruf ‘U’)
berukuran 1 byte.
Gambar 39 Debug #12 Memori
Pemrograman Assembly Mikroprosesor 8086
76
Bagian 9 Mode Pengalamatan
Instruksi perintah assembly pada mikroprosesor
8086 atau biasa disebut x86 memiliki beberapa macam
ragam jumlah operand. Ada instruksi tanpa operand
misalnya perintah RET (RETURN : kembali ke program
utama). Ada instruksi dengan satu operand misalnya
MUL AX (instruksi perkalian). Ada pula instruksi dengan
dua operand, misalnya ADD AX, 05H (instruksi
pertambahan) (Cavanagh, 2013, p. 86). Ragam cara
operand/register dalam menerima nilai tersebut disebut
dengan mode pengalamatan.
Mode pengalamatan dalam assembly dibagi
menjadi tujuh mode yaitu :
Tabel 4 Tujuh mode pengalamatan
N
o
Nama Mode Alat/
Metode
Kecepata
n/
Kapasitas
1 Register Addr GP Register/
Langsung
Tertinggi/
Terkecil
2 Immediate Addr GP Register/
Langsung
Sangat
tinggi/
Terkecil
3 Direct Memori
Addr
GP Register
+Memori/
Langsung
Tinggi/
Kecil
4 Indirect Memori
Addr
GP Register
+Memori/
Tidak
Langsung
Sedang/
Sedang
Indra Gunawan, ST., M.Kom., CEH., CHFI
77
N
o
Nama Mode Alat/
Metode
Kecepata
n/
Kapasitas
5 Base Relatif Addr GP Register
+Memori/
Tidak
Langsung
Sedang/
Sedang
6 Direct Index Addr GP Register
+segmentRegist
er
+ Memori/
Tidak
Langsung
Lambat/
Besar
7 Scale Factor Addr GP Register
+segmentRegist
er
+ Memori /
Tidak
Langsung
Lambat/
Terbesar
9.1 Register Addressing
Register addressing adalah mode pengalamatan
tercepat dan terpendek, tercepat karena register diencode
langsung kedalam instruksi, terpendek rutenya karena
pengalamatan ini hanya melibatkan mikroprosesor saja
tanpa melibatkan komponen lain seperti bus dan memori.
Proses Diagram alir pada pengalamatan ini dapat dilihat
pada gambar 40 dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
78
Gambar 40 Diagram alir register addressing.
Contoh perintah assembly yang termasuk dalam
register addressing adalah :
INC AX
DEC CX
MOV AX,BX
ADD AX,BX
SUB AX,BX
9.2 Immediate Addressing
Register addressing dan immediate addressing
adalah mode pengalamatan tercepat karena hanya
melibatkan mikroprosesor. Perbedaan keduanya adalah
register addressing bekerja dengan cara mengkopi data
antar register, sedangkan immediate register bekerja
dengan cara mengisi register langsung dengan nilai.
Proses Diagram alir pada pengalamatan ini dapat dilihat
pada gambar 41 dibawah ini.
Gambar 41 Diagram alir immediate addressing.
Contoh perintah assembly yang termasuk dalam
immediate addressing adalah :
MOV AX, 05H
MOV CL, 14H
Indra Gunawan, ST., M.Kom., CEH., CHFI
79
ADD BX, 27H
SUB AX, 44H
9.3 Direct Memori Addressing
Direct memori addressing adalah mode
pengalamatan dimana register diisi oleh nilai yang
berasal dari alamat pada memori. Maka pengalamatan
ini melibatkan mikroprosesor, memori dan bus sehingga
relatif lebih lambat dibandingkan dengan dua mode
pengalamatan sebelumnya.
Contoh perintah assembly yang termasuk dalam
direct memori addressing adalah :
MOV BX, [0108]
MOX AH, [0700]
Contoh penggunaan direct memori addressing
dapat dilihat pada program #13 dibawah ini :
;Program #13
.MODEL SMALL
ORG 100H
.CODE
MOV AX,[0108]
.DATA
A DW 'Coba'
Proses Diagram alir pada program #13 dapat
dilihat pada gambar 42 dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
80
MOV
AX,[0108]
Data pada
Offset 0108H
(variabel A)
=
‘Coba’
MULAI
Register
AX=’Coba’
SELESAI
Gambar 42 Diagram alir program #13 (direct memori
addressing).
Penjelasan : Perintah diatas assembly akan mencari nilai
pada alamat 0108h yaitu ‘Coba’ dan diisikan pada
register AX.
9.4 Indirect Memori Addressing
Base memori/register indirect addressing adalah
mode pengalamatan dimana register diisi oleh nilai yang
berasal dari alamat memori yang berada pada suatu
register. Pengalamatan ini melibatkan mikroprosesor,
memori dan bus. Perbedaan dengan pengalamatan
sebelumnya, pada pengalamatan ini nilai alamat memori
berada dalam register sehingga membutuhkan langkah
yang lebih panjang sehingga kecepatannya lebih lambat.
Indra Gunawan, ST., M.Kom., CEH., CHFI
81
Contoh perintah assembly yang termasuk dalam
Base memori/register indirect addressing adalah :
MOV AX, [BX]
MOV BX, [BX]
MOX DX, [CX]
Contoh penggunaannya dapat dilihat pada
program #13 dibawah ini :
;Program #13
.MODEL SMALL
ORG 100H
.CODE
;MOV BX, A (SALAH)
MOV BX, OFFSET A ;(BENAR)
MOV AX,[BX]
.DATA
A DW 'Coba'
Proses diagram alir pada program #13 dapat
dilihat pada gambar 43 dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
82
MOV AX, [BX]
Variabel A
=
‘Coba’
MULAI
SELESAI
MOV BX,OFFSET A
Register BX
= 0108H
Register AX
= ‘Coba’
Gambar 43 Diagram alir program #13 (indirect memori
addressing).
Perbedaan MOV BX, A dan MOV BX, OFFSET A adalah :
MOV BX, A (Isi BX = 6F43H = ‘Coba’)
MOV BX, OFFSET A (Isi BX = 0108H)
Jika kemudian diberikan perintah MOV AX, [BX] yang
artinya adalah mengisi AX dengan nilai pada alamat BX
maka yang terjadi adalah :
MOV BX, A
MOV AX,[BX]
Pada perintah diatas assembly akan mencari nilai pada
alamat memori 6F43H yaitu kosong, maka AX = 0000h.
MOV BX, OFFSET A
MOV AX,[BX]
Indra Gunawan, ST., M.Kom., CEH., CHFI
83
Sedang pada perintah diatas assembly akan mencari
nilai pada alamat 0108h yaitu ‘Coba’.
9.5 Base Relative Addressing
Base relatif addressing adalah mode
pengalamatan dimana kita mengakses alamat asal suatu
variabel array (base) yang alamat ini selanjutnya
digunakan untuk mengakses elemen-elemen dalam array
tersebut (relatif). Kecepatan pengalamatan ini lebih
lambat dari pengalamatan sebelumnya seBagian untuk
mengakses alamat memori (yang akan diisikan kedalam
register tujuan), diperlukan akses ke register lain yang
isinya adalah alamat variabel, barulah selanjutnya
menuju ke memori untuk mengakses data array dan
elemennya.
Contoh perintah assembly yang termasuk dalam
base memori/register indirect addressing adalah :
MOV AX, [BX +1]
MOX DX, [BX +2]
Contoh penggunaannya dapat dilihat pada
program #14 dibawah ini :
;Program #14
.MODEL SMALL
ORG 100H
.CODE
MOV AX,[A+1]
.DATA
A DW 'Coba'
Proses Diagram alir pada program #14 ini dapat dilihat
pada gambar 44 dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
84
Gambar 44 Diagram alir program #14 (base relative
addressing).
Penjelasan : Kita umpamakan alamat offset A adalah
0106H. Maka perintah diatas menghasilkan
AX=[0106H+1]=[0107H], selanjutnya assembly akan
mencari isi alamat 0107H kedalam memori, dan data
pada alamat 0107H adalah huruf ‘o’. Maka program
diatas menghasilkan AX=’o’.
9.6 Direct Index Addressing
Direct index addressing adalah mode
pengalamatan dimana diperlukan segment register
sebagai perantara antara general purpose register dan
memori. Kecepatan pengalamatannya tentu saja lebih
lambat dari pengalamatan sebelumnya karena
melibatkan segment register.
Contoh perintah assembly nya adalah :
MOV DL, ES:[BX][SI]
Contoh penggunaannya dapat dilihat pada program #15
dibawah ini :
;Program #15
.MODEL SMALL
ORG 100H
Indra Gunawan, ST., M.Kom., CEH., CHFI
85
.CODE
MOV CX,9H
MOV AX,0700H
MOV ES, AX
MOV BX,0119H
XOR SI, SI
MOV AH,02H
Ulang:
MOV DL,ES:[BX][SI]
INT 21H
INC SI
Loop Ulang
INT 20H
.DATA
A DB 'Coba saja'
Pemrograman Assembly Mikroprosesor 8086
86
Gambar 45 Diagram alir program #15 (Direct Index
Addressing)
Penjelasan : Pada program #15 proses pengkopian data
dari memori ke general purpose register memerlukan
Indra Gunawan, ST., M.Kom., CEH., CHFI
87
segment register sebagai perantara. Hasil output dari
program diatas adalah.
DL=0700:0119+[0…12]
DL=’Coba saja’
Jika dilihat kedalam memori, alamat 0700H:0119H
adalah string ‘Coba saja’.
9.7 Scale Factor Addressing
Scale factor addressing adalah mode
pengalamatan yang biasa digunakan untuk mengakses
array dan elemennya. Direct index dan scale factor
adalah dua mode pengalamatan yang paling lambat
karena melalui perantara segment register, dan sekaligus
memiliki kapasitas terbesar karena berhubungan dengan
data array banyak dimensi. Contoh perintah assembly
nya adalah :
MOV [BX][SI],’S’
MOV [BX][SI],01H
Contoh penggunaannya dapat dilihat pada program #16
dibawah ini :
;Program #16
.MODEL SMALL
ORG 100H
.CODE
XOR SI,SI
MOV BX, OFFSET fak
MOV CX,27d
ulang:
MOV AH,satu[SI]
MOV [BX][SI],AH
INC SI
loop ulang
XOR SI,SI
MOV CX,27d
MOV AH,02H
Pemrograman Assembly Mikroprosesor 8086
88
ulang2:
MOV DL,fak[SI]
INT 21H
INC SI
loop ulang2
INT 20H
.DATA
satu DB '01',' ','informatika',10d,13d,'02','
','industri'
fak DB 1 DUP (?)
Proses diagram alir pada program #16 ini dapat
dilihat pada gambar 46 dibawah ini.
Indra Gunawan, ST., M.Kom., CEH., CHFI
89
Gambar 46 Diagram alir Program #16
Penjelasan : Sebenarnya mikroprosesor 8086 tidak
mengenal istilah array multidimensi dalam penyimpanan
memori nya, array multidimensi hanyalah bersifat logika
diatas program, sedangkan secara fisik penyimpannya
Pemrograman Assembly Mikroprosesor 8086
90
teteplah seperti array linier satu dimensi, oleh karena itu
untuk membuat array multidimensi dibutuhkan trik
seperti pada program #16. Program diatas bekerja
dengan cara mengkopy isi variabel satu kedalam array
fak menggunakan loop kemudian mencetak isinya
dengan INT 21H service 02H.
Indra Gunawan, ST., M.Kom., CEH., CHFI
91
Bagian 10 Array
Array merupakan kumpulan data yang bertipe
data sama, dalam bidang lain disebut dengan himpunan.
Array dapat berupa kumpulan data satu dimensi, dua
dimensi maupun banyak dimensi. Semua bahasa
pemrograman tingkat tinggi relatif lebih mudah dalam
membuat array berdimensi, sedangkan dalam bahasa
assembly khususnya pada mikroprosesor 8086
sebenarnya tidak mengenal istilah banyak dimensi, array
dengan dimensi berapapun akan disimpan dalam
memori dengan cara satu dimensi, maka diperlukan trik
dalam membuatnya, pada sub Bagian selanjutnya akan
dibahas array satu dimensi sampai banyak dimensi
beserta contoh programnya.
10.1 Array Satu Dimensi
Array satu dimensi dalam bahasa assembly
dibuat dengan cara mendefisinikan suatu variabel, lalu
menentukan tipe data yang sesuai dan kemudian
mengisi data dengan dipisah koma. Data dapat
dimasukkan berupa bilangan biner, desimal, oktal,
heksadesimal maupun string.
Contoh array satu dimensi dapat dilihat pada
program #17 dibawah ini :
;Program #17
.MODEL SMALL
ORG 100H
.CODE
XOR SI,SI
MOV CX,5d
MOV AH,02H
ulang:
MOV DL,kar[SI]
Pemrograman Assembly Mikroprosesor 8086
92
INT 21H
INC SI
loop ulang
INT 20H
.DATA
Kar DB '1','2','3','4','5'
Indra Gunawan, ST., M.Kom., CEH., CHFI
93
Gambar 47 Diagram alir program #17 (Array 1 dimensi)
Penjelasan : Program diatas akan melakukan
perulangan 5 kali untuk mencetak angka 12345 ke layar.
Untuk mendefinisikan string dalam array maka
digunakan tanpa petik.
Pemrograman Assembly Mikroprosesor 8086
94
10.2 Array Multi Dimensi
Sesungguhnya array multi dimensi tidak dikenal
dalam mikroprosesor 8086. Penyimpanan array multi
dimensi dalam memori tetaplah seperti satu dimensi
yaitu secara linier.
Contoh dibuat array dua dimensi seperti dibawah
ini :
.DATA
A DB 1,2,3,4,5
B DB 6,7,8,9,10
Jur DW 1 DUP(OFFSET A, OFFSET B)
Maka sesungguhnya didalam memori,
penyimpannya akan tetap linier seperti berikut ini :
1,2,3,4,5,6,7,8,9,10, Jur…
Sehingga dalam pemrograman assembly, untuk
membuat array multi dimensi diperlukan trik dalam
membuat kode programnya. Yang perlu diperhatikan
adalah :
 Tentukan tipe data yang tepat, sesuaikan dengan lebar data pada
tiap elemen.
 Gunakan pointer untuk mengakses data per byte atau per word.
 Gunakan tanda 0 sebagai pemisah antar elemen sebagai
penanda untuk memudahkan pencarian.
 Buatlah satu baris satu variabel, kemudian buat variabel lain
sebagai array untuk menampung offset masing-masing variabel.
Rumus untuk mengakses offset elemen adalah :
Offset elemen : (baris x - 1 * 2)
Misalnya ingin mengakses angka 8, maka langkah-
langkahnya adalah :
1. Register SI = Jur [(2-1) * 2]= Jur [2] = 0601H
Indra Gunawan, ST., M.Kom., CEH., CHFI
95
2. Register BL = Elemen Jur ke [SI]= 06H
3. Register BH= Elemen Jur ke [SI+1]= 01H
4. Register BX = 0106H
5. Lakukan loop sebanyak 5x(jumlah kolom=5) pada alamat [BX].
6. Jika bertemu tanda 0 keluar dari loop, jika tidak terus lakukan
loop dan naikkan nilai BX.
7. Jika Loop no 6 sudah berhenti, maka BX berisi OFFSET angka 8,
misalkan BX=0108H.
8. Lakukan loop lagi untuk mencetak karakter pada alamat OFFSET
[BX]/0108H.
9. Maka akan tercetak angka 8
Contoh array satu dimensi dapat dilihat pada
program #18 dibawah ini :
;Program #18
;Cetak 'Industri'
.MODEL SMALL
ORG 100H
.CODE
;String ‘industri’ berada pada var D
;Letak 'OFFSET D' dalam array Jur
;Baris-1 * 2 = 4-1*2 = 6
;index array dimulai dari 0
MOV SI,6H
;BX=OFFSET D
;Mengisi BX dengan cara terbalik
MOV BL,BYTE PTR Jur[SI]
MOV BH,BYTE PTR Jur[SI+1]
;Loop utk menemukan penanda 0 pd baris ke
4(variabel D)
cek:
Pemrograman Assembly Mikroprosesor 8086
96
MOV AL,BYTE PTR [BX]
INC BX
CMP AL,0
JNE cek
MOV CX,8h
JE ulang
;cetak 'industri'
;alamat offset 'industri' ada di BX
ulang:
MOV AH,02H
MOV DL,BYTE PTR [BX]
INT 21H
INC BX
loop ulang
INT 20H
.DATA
A DB '00001',0,'Ekonomi',0,'Gedung A',0
B DB '00002',0,'Hukum',0,'Gedung B',0
C DB '00003',0,'Kimia',0,'Gedung C',0
D DB '00004',0,'Industri',0,'Gedung D',0
E DB '00005',0,'Biologi',0,'Gedung E',0
Jur DW 1 DUP(OFFSET A,OFFSET B,OFFSET
C,OFFSET D,OFFSET E)
Indra Gunawan, ST., M.Kom., CEH., CHFI
97
Gambar 48 Diagram alir program #19 (Array multi dimensi)
Penjelasan :
 Register SI = Jur [(4-1) * 2]= Jur [6]= 6501H
 Register BL= Elemen Jur ke [SI]= 65H
Pemrograman Assembly Mikroprosesor 8086
98
 Register BH= Elemen Jur ke [SI+1]= 01H
 Register BX = 0165H
 Lakukan loop cek pada alamat [BX]/[0165H] sampai bertemu
tanda 0 maka keluar dari loop, jika tidak ketemu terus lakukan
loop dan naikkan nilai BX.
 Jika Loop cek sudah berhenti, maka BX berisi OFFSET string
‘industri’, misalkan BX=0171H.
 Lakukan loop lagi untuk mencetak karakter pada alamat OFFSET
[BX]/0171H.
 Maka akan tercetak string ‘industri’.
Indra Gunawan, ST., M.Kom., CEH., CHFI
99
Bagian 11 Percabangan Dan Perulangan
Percabangan dan perulangan merupakan dua hal
yang harus ada dalam suatu bahasa pemrograman. Jika
diperumpamakan baris program adalah jalan raya, maka
percabangan mirip persimpangan jalan, tidak mungkin
terjadi ada jalan raya tanpa persimpangan jalan.
Demikian juga dengan perulangan, perulangan dapat
diperumpamakan bundaran pada jalan raya.
Percabangan berguna untuk mengarahkan program
kepada sub rutin tertentu jika terpenuhi suatu syarat
tertentu, sedang perulangan berguna untuk mengulang-
ulang sub rutin tertentu dengan syarat tertentu.
11.1 Label
Label merupakan bagian vital pada bahasa
pemrograman assembly, label hanya diperlukan ketika
digunakan percabangan dan perulangan. Aturan
penulisan label adalah sebagai berikut :
 Karakter awal label dapat berupa huruf a sampai z maupun
karakter tertentu seperti @, $, _, ?.
 Panjang label maksimal adalah 31 digit karakter.
 Tidak boleh menggunakan kata-kata yang telah terpakai oleh
assembly.
 Setiap label harus unik, tidak boleh ada label yang sama salam
satu program.
(L. B. Das, 2010, p. 86)
Contoh penggunaan label dapat dilihat pada
program #19 berikut ini.
;Program #19
.MODEL SMALL
Pemrograman Assembly Mikroprosesor 8086
100
ORG 100h
.CODE
MOV AH, 02H
abcdefghijklnopqrstuvwxyz:
MOV DL,'-'
INT 21H
@coba:
MOV DL,'A'
INT 21H
#coba2:
MOV DL,'B'
INT 21H
$coba3:
MOV DL,'C'
INT 21H
_coba4:
MOV DL,'D'
INT 21H
INT 20H
Indra Gunawan, ST., M.Kom., CEH., CHFI
101
Gambar 49 Diagram alir program #19 (Label).
11.2 Percabangan dengan Lompatan
Percabangan dengan lompatan pada assembly
dilakukan dengan perintah JMP (Jump), terdapat dua
macam jump yaitu bersyarat dan tanpa syarat.
Pemrograman Assembly Mikroprosesor 8086
102
11.2.1 Lompatan Tanpa Syarat
Lompatan tanpa syarat adalah jenis lompatan
(jump) yang terjadi tanpa didahului oleh seBagian
tertentu. Format perintah jump pada assembly adalah
sebagai berikut :
JMP Tujuan
Tujuan dapat berupa label, register maupun
alamat memori. Ketika baris program sampai pada kode
JMP, maka program akan lompat menuju
operand/tujuan yang ditunjuk oleh JMP tanpa syarat.
Maka jenis jump ini dapat digunakan untuk berpindah
antar label atau antar lokasi memori. Contoh
penggunaan perintah JMP dapat dilihat pada program
#20 dibawah ini.v
;Program #20
.MODEL SMALL
ORG 100h
.CODE
@coba:
MOV BX,0100H
MOV AH, 02H
MOV DL,'A'
INT 21H
JMP #cobalagi
#cobalagi:
JMP @coba
Indra Gunawan, ST., M.Kom., CEH., CHFI
103
Gambar 50 Diagram alir program #20 (perintah JMP).
Penjelasan : Ketika sampai pada baris JMP @coba,
program akan lompat ke label @coba, dan akan
melakukan perulangan tanpa henti.
Pemrograman Assembly Mikroprosesor 8086
104
11.2.2 Lompatan Bersyarat
Lompatan bersyarat adalah jenis lompatan (jump)
yang terjadi dengan didahului oleh seBagian tertentu.
Lompatan ini didahului perintah CMP (compare).
Terdapat banyak perintah jump yang masuk dalam
kategori jump bersyarat, perintah-perintah tersebut
dapat dilihat pada tabel 5 berikut :
Tabel 5 Jump bersyarat
No Perintah Arti Kondisi
1 JA Jump if Above CF=0 dan
ZF=0
2 JAE Jump if Above
or Equal
CF=0
3 JB Jump if Below CF=1
4 JBE Jump if Below
Or Equal
CF=1 atau
ZF=1
5 JC Jump if Carry CF=1
6 JCXZ Jump if CX
Zero
CX=0
7 JE Jump if Equal ZF=1
8 JNA Jump if Not
Above
CF=1 atau
ZF=1
9 JNAE Jump if Not
Above or Equal
CF=1
No Perintah Arti Kondisi
10 JNB Jump if Not
Below
CF=0
11 JNBE Jump if Not
Below nor
Equal
CF=0 dan
ZF=0
Indra Gunawan, ST., M.Kom., CEH., CHFI
105
12 JNC Jump if no
Carry
CF=0
13 JNE Jump if Not
Equal
ZF=0
14 JNP Jump if No
Parity
PF=0
15 JNZ Jump if Not
Zero
ZF=0
16 JP Jump if Parity PF=1
17 JPE Jump if Parity
Even
PF=1
18 JPO Jump if Parity
Odd
PF=0
19 JZ Jump if Zero ZF=1
Contoh penggunaan perintah JMP dapat dilihat
pada program #21 dibawah ini.
;Program #21
.MODEL SMALL
ORG 100h
.CODE
@coba:
MOV AH,02H
MOV DL,’H’
CMP DL,’Z’
JA #cobalagi
JB #cobacoba
#cobalagi:
INT 21H
JMP #akhir
#cobacoba:
INT 21H
JMP #akhir
#akhir:
Pemrograman Assembly Mikroprosesor 8086
106
INT 20H
Indra Gunawan, ST., M.Kom., CEH., CHFI
107
Gambar 51 Diagram alir program #21 (jump bersyarat).
Penjelasan :
Pemrograman Assembly Mikroprosesor 8086
108
 Ketika perintah CMP DL,’Z’ dijalankan, komputer
membandingkan nilai DL dan Z dan mengaktifkan sejumlah flag
register.
 Perintah JA #cobalagi melakukan cek ke register, jika nilai
heksadesimal DL lebih tinggi dibanding nilai heksadesimal ‘Z’
maka lompat ke label #cobalagi.
 Perintah JB #cobacoba melakukan cek ke register, jika nilai
heksadesimal DL lebih kecil dibanding nilai heksadesimal ‘Z’
maka lompat ke label #cobacoba.
 Berhubung nilai DL adalah ‘H’ dan nilai operand pada perintah
CMP adalah ‘Z’ maka nilai DL lebih kecil maka perintah JB
#cobacoba dieksekusi.
 Label #cobacoba mencetak ke layar dengan INT 21H kemudian
lompat tanpa syarat ke label #akhir.
 Label #akhir mengakhiri program dengan perintah INT 20H.
11.3 Perulangan
Perulangan pada assembly dapat dilakukan
dengan perintah LOOP dan JMP. Perintah LOOP
memberikan perulangan dengan kondisi, perintah JMP
memberikan perulangan tanpa kondisi.
11.3.1 Perulangan Tanpa Syarat
Perulangan tanpa syarat pada assembly dapat
dilakukan dengan menggunakan dengan perintah JMP.
Format penulisan perintahnya telah dibahas pada
Bagian sebelumnya. Contoh programnya dapat dilihat
pada contoh program #22 dibawah ini.
Indra Gunawan, ST., M.Kom., CEH., CHFI
109
;Program #22
.MODEL SMALL
ORG 100h
.CODE
@coba:
MOV AH,02H
MOV DL,'C'
INT 21H
JMP @coba
Pemrograman Assembly Mikroprosesor 8086
110
MULAI
MOV AH, 02H
MOV DL,’C’
INT 21H
Register
AH=02H
Register AH=’C’
JMP
@coba
Tercetak ‘C'
Label @coba
LOOP
Gambar 52 Diagram alir program #22 (JUMP)
Penjelasan : Program #22 akan melakukan loop
permanen tanpa henti karena perintah JMP selalu
terjalankan dan tidak diberikan kondisi apapun yang
bisa menyeBagiankan perintah JMP terlewati.
Indra Gunawan, ST., M.Kom., CEH., CHFI
111
11.3.2 Perulangan Bersyarat
Perulangan bersyarat pada assembly dapat dilakukan
dengan menggunakan dengan perintah LOOP. Perintah
LOOP berhubungan dengan register CX, perulangan
dengan LOOP akan berhenti manakala isi register CX=0,
sehingga untuk menentukan jumlah perulangannya, isi
register CX dengan nilai tertentu. Format penulisan
perintahnya adalah sebagai berikut:
Label:
LOOP Label
Contoh programnya dapat dilihat pada contoh
program #23 dibawah ini.
;Program #23
.MODEL SMALL
ORG 100h
.CODE
MOV CX,03H
@coba:
MOV AH,02H
MOV DL,'C'
INT 21H
LOOP label
Pemrograman Assembly Mikroprosesor 8086
112
Gambar 53 Diagram alir program 23 (LOOP)
Indra Gunawan, ST., M.Kom., CEH., CHFI
113
Bagian 12 Stack (Tumpukan)
Stack (tumpukan) adalah komponen yang sangat
penting dalam pemrograman assembly. Jika
dibandingkan dengan bahasa pemrograman tingkat
tinggi maka assembly memiliki perbedaan yang banyak,
perbedaan tersebut yang menyeBagiankan stack sangat
penting dalam pemrograman assembly dan kurang
penting pada pemrograman tingkat tinggi.
Pada pemrograman tingkat tinggi, umumnya nilai
disimpan pada variabel (memori), variabel tersebut dapat
dibuat sebanyak banyaknya sesuai besar memori
komputer sehingga pada pemrograman tingkat tinggi
hampir tidak diperlukan adanya stack.
Lain halnya dengan assembly, pada assembly
nilai tidak hanya disimpan pada variabel (memori) saja,
tetapi juga disimpan pada register (mikroprosesor). Disisi
lain banyaknya general purpose register hanya 8 buah
(AH, AL, BH, BL, CH, CL, DH, DL). General purpose
register ini sifatnya tumpuk timpa, artinya ketika suatu
register diisi nilai, maka nilai yang lama hilang tanpa
bekas. Jika program yang dibuat cukup banyak baris
kodenya dan tanpa STACK maka tentu akan sangat sulit
sekali. Sekarang bayangkan ada sebuah program
assembly menjumlahkan deretan 100 angka sekuensial,
assembly hanya mampu menjumlahkan 2 nilai dalam
satu operasi, maka setiap penjumlahan 2 nilai, hasilnya
harus disimpan untuk dijumlahkan lagi di angka
berikutnya, dan register yang dipakai juga cuma itu-itu
saja, maka disinilah fungsinya STACK yaitu sebagai
media simpan sementara.
STACK terdiri dari dua perintah yaitu PUSH dan
POP. PUSH digunakan untuk menyimpan nilai ke stack
memori, sedang POP digunakan untuk mengambilnya
kembali. Format penulisan perintahnya adalah :
PUSH operand
Pemrograman Assembly Mikroprosesor 8086
114
POP operand
Perintah PUSH dan POP hanya dapat digunakan
pada register 16 bit (AX, BX, CX, DX). STACK mampu
menyimpan data sebanyak 2byte x 5 baris. Tumpukan
pada stack memori bersifat LIFO (last in first out),
sehingga perintah PUSH dan POP harus dibalik
urutannya dalam program. Contoh programnya dapat
dilihat pada program #23 dibawah ini.
;Program #23
.MODEL SMALL
ORG 100h
.CODE
MOV AX,01H
MOV BX,02H
MOV CX,03H
MOV DX,04H
PUSH AX
PUSH BX
PUSH CX
PUSH DX
POP DX
POP CX
POP BX
POP AX
Indra Gunawan, ST., M.Kom., CEH., CHFI
115
Gambar 54 Diagram alir program #23 (PUSH dan POP).
Penjelasan : Program #23 diatas memperlihatkan bahwa
jika urutan PUSH dan POP tidak dibalik, maka nilai
registernya berbeda dengan kondisi sebelumnya.
Pemrograman Assembly Mikroprosesor 8086
116
Bagian 13 Procedure Dan Macro
Procedure dan macro dalam bahasa assembly
ibarat procedure dan function dalam bahasa
pemrograman tingkat tinggi, berbeda nama tetapi
mempunyai fungsi yang mirip.
Procedure dan macro adalah metode pada bahasa
assembly untuk membuat program didalam program
(sub rutin/sub program), keduanya digunakan untuk
memecah program besar menjadi program-program kecil
sehingga program lebih mudah untuk dibaca dan
dipelihara.
Perbedaan procedure dan macro mirip dengan
perbedaan procedure dan function yaitu :
 Procedure tidak bisa menerima parameter/variabel dari si
pemanggil (program utama).
 Hasil program yang menggunakan procedure lebih kecil
ukurannya.
 Hasil program yang menggunakan procedure lebih lambat
aksesnya.
 Procedure hanya dapat mengakses 1 segment yang sama.
13.1 Prosedur
Prosedur digunakan ketika diinginkan untuk
memecah-mecah program besar menjadi program-
program kecil yang tidak berorientasi kecepatan akses,
ukuran program kecil dan data yang digunakan kecil dan
sederhana. Jika digunakan procedure maka komunikasi
pertukaran data antara program utama dan procedure
adalah melalui register, stack dan variabel. Format
penulisan perintah procedure adalah sebagai berikut :
Indra Gunawan, ST., M.Kom., CEH., CHFI
117
;------------INI PROCEDURE---------
NAMA PROC NEAR
; tulis isi procedure disini
NAMA ENDP
; ----------INI PROGRAM UTAMA------
.MODEL SMALL
ORG 100h
.CODE
CALL NAMA
Berikut ini adalah contoh-contoh program yang
menggunakan procedure.
;Program #24
;Cetak huruf Z
.MODEL SMALL
ORG 100h
.CODE
;########### PROCEDURE
cetak proc near
mov ah,02h
mov dl, 'z'
int 21h
ret
cetak endp
;#### PROCEDURE
call cetak
int 20h
Program #24 diatas dijelaskan dengan gambar 54
dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
118
MULAI
CALL
CETAK1
PROCEDURE
CETAK
MOV AH,02H
MOV DL,’Z’
INT 21H
Register
AH=02H
Register
DL=’Z’
Tercetak Z
Gambar 55 Diagram alir program #24 (procedure)
Penjelasan : Perintah pertama yang dibaca assembly
pada program #24 diatas adalah call cetak (program
utama), kemudian melompat ke procedure, setelah
selesai mengerjakan semua baris kode di procedure,
maka melompat kembali ke program utama dan
Indra Gunawan, ST., M.Kom., CEH., CHFI
119
mengerjakan perintah INT 20H. Proram #24 diatas
mencetak satu huruf ‘Z’ ke layar.
Program #25 dibawah ini untuk mencetak kata
‘SATU’ melalui variabel.
;Program #25
;Cetak ‘SATU’
.MODEL SMALL
ORG 100h
.CODE
;################## PROCEDURE
cetak1 proc near
mov ah,02h
mov dl, var[0]
int 21h
cetak1 endp
cetak2 proc near
mov ah,02h
mov dl, var[1]
int 21h
cetak2 endp
cetak3 proc near
mov ah,02h
mov dl, var[2]
int 21h
cetak3 endp
cetak4 proc near
mov ah,02h
mov dl, var[3]
int 21h
ret
cetak4 endp
;##### PROGRAM UTAMA ######
call cetak1
call cetak2
Pemrograman Assembly Mikroprosesor 8086
120
call cetak3
call cetak4
int 20h
.DATA
var db 'satu'
Program #25 diatas dijelaskan dengan gambar 56
dibawah ini.
Gambar 56 Diagram alir program #25 (procedure)
Penjelasan : Pada program #25 diatas program utama
dieksekusi terlebih dahulu dengan perintah call cetak1,
call cetak2, call cetak3, call cetak4, kemudian setelah
masing-masing procedure menjalankan programnya
Indra Gunawan, ST., M.Kom., CEH., CHFI
121
masing-masing selanjutnya kembali ke program utama.
Program #25 diatas mencetak kata ‘SATU’.
13.2 Macro
Macro digunakan ketika diinginkan kondisi untuk
memecah-mecah program menjadi subprogram yang
lebih kecil yang penggunaan datanya komplek dan besar,
ukuran file program lebih besar, kecepatan akses lebih
tinggi. Macro dapat melakukan komunikasi pertukaran
data dengan program utama melalui parameter,
menggunakan register maupun variabel dan stack
memori. Format penulisan perintah procedure adalah
sebagai berikut :
;------------INI MACRO---------
NAMA MACRO param1,param2,param3...dst
; tulis isi macro disini
ENDM
; ----------INI PROGRAM UTAMA------
.MODEL SMALL
ORG 100h
.CODE
NAMA nilai1,nilai2,nilai3
Berikut ini adalah contoh-contoh program yang
menggunakan macro.
;Program #26
;Cetak ‘aku’
;########### MACRO ############
cetak macro x
mov ah,02h
mov dl,x
int 21h
endm
;########### MACRO ############
.MODEL SMALL
ORG 100h
Pemrograman Assembly Mikroprosesor 8086
122
.CODE
cetak 'a'
cetak 'k'
cetak 'u'
int 20h
Gambar 57 Diagram alir program #26 (Macro).
Penjelasan : Program berjalan dimulai dari program
utama, memanggil Cetak ‘A’, Cetak ‘k’, Cetak ‘u’. Macro
Cetak menerima parameter ‘A’,’k’,’u’ sebagai variabel x,
variabel x dimasukkan ke register DL kemudian
dilakukan INT 21. Maka tercetak kata ‘Aku’.
;Program #27
Indra Gunawan, ST., M.Kom., CEH., CHFI
123
;Macro multi parameter
;################## MACRO
cetak macro x, y, z, a
mov dl, x
int 21h
mov dl, y
int 21h
mov dl, z
int 21h
mov dl, a
int 21h
endm
;################## MACRO
.MODEL SMALL
ORG 100h
.CODE
mov ah,02h
cetak var[0],var[1],var[2], var[3]
int 20h
.DATA
var db 'satu'
Pemrograman Assembly Mikroprosesor 8086
124
MULAI
Cetak var[0].var[1],
var[2],var[3]
=
Cetak ‘s’,’a’,’t’,’u’
Cetak
Macro
x,z,y,a
MOV AH,02H
MOV DL,y
INT 21H
Register
AH=02H
Register
DL,x
Tercetak
‘satu’
Variabel var
= ‘satu’
MOV DL,a
MOV DL,z
MOV DL,x
Register
DL,z
Register
DL,y
Register
DL,a
SELESAI
Gambar 58 Diagram alir program #27 (macro).
Penjelasan : Progam #27 dimulai dengan perintah MOV
ah,02H, kemudian memanggil macro cetak dengan
mengirim parameter s,a,t,u. Macro cetak menerima nilai
tersebut dan memasukkan ke register DL, kemudian INT
21 akan mencetak kelayar kata ‘satu’.
Indra Gunawan, ST., M.Kom., CEH., CHFI
125
Bagian 14 Operasi Aritmatika
Membahas operasi aritmatika tentu tidak bisa
lepas dari bahasan bilangan. Bagian ini akan diawali
pembahasan tentang 4 jenis bilangan yang mampu
dibaca oleh assembly, kemudian dilanjutkan
pembahasan tentang empat operasi aritmatika yaitu
penambahan, pengurangan, perkalian, pembagian.
14.1 Bilangan
Bahasa assembly mampu membaca berbagai jenis
bilangan yaitu desimal, oktadesimal, heksadesimal, dan
biner. Bagaimana assembly membedakan bilangan-
bilangan tersebut ?, tentu saja pembuat program harus
menuliskan jenis bilangan pada akhir suatu bilangan,
contohnya adalah seperti berikut :
Gambar 59 Menulis bilangan pada assembly.
Penjelasan :
 Baris 06. Bilangan biner
 Baris 07. Bilangan heksadesimal
 Baris 08. Bilangan oktadesimal
 Baris 09. Bilangan desimal
Pemrograman Assembly Mikroprosesor 8086
126
Perlu diketahui bahwa meskipun pembuat program
dapat memasukkan empat jenis bilangan pada assembly
secara bersama-sama, tetapi data pada register dan
memori akan tampil dalam format heksadesimal,
sehingga jika misalnya pada program dimasukkan angka
dalam format desimal kemudian dilakukan operasi
aritmatika, maka jika ingin dilakukan debugging register
maupun memori untuk melihat hasilnya, harus
dikonversi terlebih dahulu dipikiran angka-angka
tersebut menjadi format heksadesimal sehingga proses
debugging menjadi lebih mudah.
14.1.1 Mencetak bilangan desimal
Mencetak bilangan pada assembly sangatlah
berbeda dengan bahasa pemrograman tingkat tinggi.
Pada bahasa pemrograman tingkat tinggi mencetak
bilangan sama mudahnya dengan mencetak string
maupun mencetak lainnya, semua dilakukan secara
otomatis dibelakang layar tanpa dibutuhkan andil si
pembuat program. Lain halnya pada assembly, semua
dilakukan manual. Tidak ada cara otomatis pada
assembly. Jika ingin dicetak kelayar bilangan desimal
maka dibutuhkan sedikit trik untuk melakukannya.
Semua karakter yang tampil di layar berpatokan pada
tabel ASCII dalam mencetaknya.
Program #28 dibawah ini adalah program untuk
mencetak bilangan desimal.
; Program #28
.MODEL SMALL
ORG 100h
.CODE
; AX = angka yang akan dicetak
MOV AX,angka
; BX = penyebut
MOV BX,10
; CX = 0
XOR CX,CX
Indra Gunawan, ST., M.Kom., CEH., CHFI
127
Ulang:
; Cegah sisa bagi menjadi pembilang !
XOR DX,DX
; Bagi angka yang akan dicetak dengan 10
DIV BX
; Simpan sisa bagi dalam stack
PUSH DX
; CX ditambah 1
INC CX
; Apakah hasil bagi sudah habis ?
CMP AX,0
; Jika belum, ulangi lagi !
JNE Ulang
Cetak:
; Ambil 1 angka yang disimpan
POP DX
; Ubah angka tersebut dalam kode ASCII
ADD DL,'0'
; Cetak angka tersebut
MOV AH,02
INT 21h
; ulangi
LOOP Cetak
INT 20h
.DATA
; Angka yang akan dicetak
angka DW 243
Pemrograman Assembly Mikroprosesor 8086
128
Gambar 60 Diagram alir program #28 (mencetak desimal)
Penjelasan : Prinsip kerja program #28 diatas adalah.
 Jika ingin dicetak nilai x, maka bagi nilai x dengan 10 dengan
operator DIV.
Indra Gunawan, ST., M.Kom., CEH., CHFI
129
 Sisa dari pembagian tersebut simpan pada STACK.
 Bagi terus bilangan x sampai habis.
 Jika sudah habis terbagi, ambil angka-angka yang tersimpan pada
STACK secara berurutan.
 Tambahkan angka-angka yang telah diambil dari STACK dengan
string ‘0’, kemudian cetak satu persatu sampai isi STACK kosong.
 Maksud dari ditambah string ‘0’ adalah untuk mengubah angka
menjadi kode ASCII. Misal angka dari STACK adalah 4 ditambah
string ‘0’ (30H) = 30H+4H=34H (angka 4 desimal).
14.1.2 Mencetak bilangan heksadesimal
Meskipun bilangan heksadesimal adalah bilangan
yang utama pada assembly yaitu bilangan yang tampil
pada saat debugging di memori dan register, namun
mencetaknya ke layar adalah hal lain. Mencetak ke layar
selalu berpatokan dengan tabel ASCII. Program #29
dibawah ini adalah program untuk mencetak angka
heksadesimal.
; Program #29
Cetak MACRO
MOV DL,heksa[BX]
MOV AH,02
INT 21h
ENDM
.MODEL SMALL
ORG 100h
.CODE
; Jadikan BH=0
SUB BH,BH
; BL = angka yang akan dicetak
Pemrograman Assembly Mikroprosesor 8086
130
MOV BL,angka
; Simpan angka tersebut
PUSH BX
; Ambil 4 bit tinggi dari +
MOV CL,4
; BL untuk dicetak
SHR BL,CL
; Cetak 1 angka heksadesimal tingginya
Cetak
; Ambil angka yang disimpan
POP BX
; Ambil 4 bit rendah dari +
AND BL,0Fh
; BL untuk dicetak
Cetak
INT 20h
.DATA
Heksa DB '0123456789ABCDEF'
; Angka yang akan dicetak 255=7Bh
angka DB 123d
Indra Gunawan, ST., M.Kom., CEH., CHFI
131
Ga
mbar 61 Diagram alir program #29 (mencetak
heksadesimal).
Penjelasan : Prinsip utama program #29 diatas adalah.
Pemrograman Assembly Mikroprosesor 8086
132
 Membagi bilangan yang ingin dicetak misalnya 7BH dengan 2
digit.
 Digit 7 kiri diambil dengan cara menggeser bilangan tersebut 4
kali kekanan, hasilnya simpan dalam BX, BX=07H.
 Cetak elemen array variabel heksa ke BX, misalnya cetak
heksa[7]= ‘7’.
 Digit B kanan diambil dengan cara melakukan operasi AND 0FH
ke bilangan yang ingin dicetak tersebut. Hasilnya simpan pada
BX.
 Cetak elemen array variabel heksa ke BX. Heksa [BX]=heksa
[B]=’B’.
14.2 Operasi Penambahan
Operasi penambahan pada assembly tidak
memerlukan register khusus. Semua general purpose
register boleh digunakan secara bebas. Format penulisan
perintah penambahan adalah :
ADD Operand1, Operand2
ADC Operand1, Operand2
ADD digunakan apabila bilangan yang
dijumlahkan hasilnya sama atau lebih kecil ukurannya
dibanding operand nya. ADC (ADD with CARRY)
digunakan apabila hasil penjumlahan lebih besar dari
ukuran operand nya dengan Operand1 dapat berupa
register atau alamat memori. Operand2 dapat berupa
register, alamat memori atau angka. Hasil penjumlahan
disimpan di operand1. Contoh program penggunaan ADD
dapat dilihat pada program #30 dibawah ini.
; Program #30
.MODEL SMALL
ORG 100h
Indra Gunawan, ST., M.Kom., CEH., CHFI
133
.CODE
MOV AL,5H
MOV DL,4H
ADD AL,DL
ADD AL,02H
MOV AL,angka1
MOV BL,angka2
ADD BL,AL
.DATA
angka1 DB 123d
angka2 DB 54H
Pemrograman Assembly Mikroprosesor 8086
134
Gambar 62 Diagram alir program #30 (ADD)
Penjelasan : Perintah ADD menyimpan hasil
penjumlahan pada operand kiri. Operand kanan dapat
berupa register, memori maupun angka.
Indra Gunawan, ST., M.Kom., CEH., CHFI
135
14.3 Operasi Pengurangan
Operasi pengurangan juga dapat menggunakan
general purpose register secara bebas. Format penulisan
perintahnya adalah :
SUB Operand1, Operand2
SBB Operand1, Operand2
SUB digunakan apabila bilangan yang dikurangkan
hasilnya sama atau lebih kecil ukurannya dibanding
operand nya. SBB (SUBSTRACT with CARRY) digunakan
apabila hasil pengurangan lebih besar dari ukuran
operand nya. dengan Operand1 dapat berupa register
atau alamat memori. Operand2 dapat berupa register,
alamat memori atau angka. Hasil penjumlahan disimpan
di operand1. Contoh program penggunaan SUB dapat
dilihat pada program #31 dibawah ini.
Pemrograman Assembly Mikroprosesor 8086
136
Gambar 63 Diagram alir program #31 (SUB).
Penjelasan : Perintah SUB menyimpan hasil
pengurangan pada operand kiri. Operand kanan dapat
berupa register, memori maupun angka.
Indra Gunawan, ST., M.Kom., CEH., CHFI
137
14.4 Operasi Perkalian
Operasi perkalian memiliki beberapa format
penggunaan register dan hasilnya secara khusus.
Operasi perkalian menggunakan perintah MUL, perintah
ini hanya memerlukan satu operand saja. Format
penulisan perintahnya adalah sebagai berikut.
MUL Operand2
Operasi MUL memiliki aturan sebagai berikut :
 MUL Operand2=Operand1 x Operand2
 Register AX adalah operand1. Isilah register AX dengan angka
yang ingin dikalikan.
 Isilah Operand2 dengan angka yang ingin dikalikan.
 Operand2 dapat berupa register, memori maupun angka.
Contoh penggunaan perintah MUL dapat dilihat pada
program #32 dibawah ini.
; Program #32
.MODEL SMALL
ORG 100h
.CODE
MOV AL,05H
MOV DL,02H
MUL DL
MOV AL,angka1
MOV CL,angka2
MUL CL
.DATA
angka1 DB 123d
angka2 DB 54H
Pemrograman Assembly Mikroprosesor 8086
138
Gambar 64 Diagram alir program #32 (MUL).
Penjelasan : Register AX menampung hasil perkalian,
jika tidak cukup, akan digunakan AX dan DX.
14.5 Operasi Pembagian
Operasi pembagian memiliki beberapa format
penggunaan register dan hasilnya secara khusus.
Operasi pembagian menggunakan perintah DIV, perintah
ini hanya memerlukan satu operand saja. Format
penulisan perintahnya adalah sebagai berikut.
DIV Operand2
Indra Gunawan, ST., M.Kom., CEH., CHFI
139
Operasi DIV memiliki aturan sebagai berikut :
 DIV Operand2=Operand1 / Operand2
 Register AX adalah operand1. Isilah register AX dengan angka
yang ingin dibagi.
 Isilah Operand2 dengan angka yang ingin dibagi.
 Operand2 dapat berupa register, memori maupun angka.
Contoh penggunaan perintah DIV dapat dilihat pada
program #33 dibawah ini.
; Program #33
.MODEL SMALL
ORG 100h
.CODE
MOV AL,06H
MOV DL,02H
DIV DL
MOV AL,angka1
MOV CL,angka2
DIV CL
.DATA
angka1 DB 99d
angka2 DB 3H
Pemrograman Assembly Mikroprosesor 8086
140
MULAI
MOV AL,06H MOV DL,02H
DIV DL
=
AL / DL
AL=03H
MOV AL,angka1 MOV CL,angka2
Variabel angka1
=
99d
Variabel angka1
=
3H
DIV CL
=
AL / CL
AX=21H
SELESAI
Gambar 65 Diagram alir program #33 (DIV).
Penjelasan : Register AX menampung hasil pembagian,
jika tidak cukup, akan digunakan AX dan DX.
Indra Gunawan, ST., M.Kom., CEH., CHFI
141
Bagian 15 Operasi File
Operasi file dalam bahasa assembly melibatkan
interrupt 21H. Service yang dipakai adalah AH=3Fh
untuk membaca file, AH=41H untuk menghapus file,
AH=40H untuk menulis file, AH=3EH untuk menutup
file. Beberapa variabel yang harus dibuat untuk
menggunakan interrupt ini yaitu :
 Variabel untuk menampung nama file.
 Variabel untuk menampung isi file.
 Variabel untuk menampung text yang akan diinputkan.
Pada emulator emu8086 dengan konfigurasi default maka
file akan terbuat pada direktori :
‘C:emu8086MyBuild’
Atribut file ada 5, atribut ini berupa angka heksadesimal
yang harus diisikan ke register CX. Mode-mode itu
adalah sebagai berikut.
 0H : Read only.
 01H : Hidden.
 02H : File system.
 03H : Volume label.
 04H :Nama Subdirektori.
 05H : File archive.
Program untuk membuat file dapat dilihat pada
program #34 dibawah ini.
Buat MACRO namafile, atribut, tampungan
PUSH CX
PUSH DX
MOV AH,3Ch
Pemrograman Assembly Mikroprosesor 8086
142
MOV CX,atribut
LEA DX,namafile
INT 21h
MOV tampungan,AX
POP DX
POP CX
ENDM
;Program #34
.MODEL SMALL
ORG 100H
.CODE
Buat namafile,0h,tampungan
INT 20H
.DATA
namafile db "file.txt", 0
tampungan dw ?
text DB 'Uji coba'
Indra Gunawan, ST., M.Kom., CEH., CHFI
143
Ga
mbar 66 Diagram alir program #34 (Buat file)
Penjelasan :
 Variabel namafile untuk menampung nama file yang diakhiri
karakter 0.
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086
Pemrograman Assembly Mikroprosesor 8086

Weitere ähnliche Inhalte

Was ist angesagt?

Transformasi z
Transformasi zTransformasi z
Transformasi zIbnu Hakim
 
Teknik multiplex
Teknik multiplexTeknik multiplex
Teknik multiplexkolodit
 
Fungsi alih sistem kontrol
Fungsi alih sistem kontrolFungsi alih sistem kontrol
Fungsi alih sistem kontrolarie eric
 
konsep dasar sinyal dan sistem
konsep dasar sinyal dan sistemkonsep dasar sinyal dan sistem
konsep dasar sinyal dan sistemrajareski ekaputra
 
Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)
Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)
Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)Beny Nugraha
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledSawah Dan Ladang Ku
 
Bab 7 multiplexing
Bab 7 multiplexingBab 7 multiplexing
Bab 7 multiplexingbrilorabbit
 
Data Logging Tegangan melalui Komunikasi Serial
Data Logging Tegangan melalui Komunikasi SerialData Logging Tegangan melalui Komunikasi Serial
Data Logging Tegangan melalui Komunikasi SerialNur Kholifah Hidayah
 
Pemograman zelio soft 2
Pemograman zelio soft 2Pemograman zelio soft 2
Pemograman zelio soft 2arie eric
 
Gerbang Universal NAND dan NOR
Gerbang Universal NAND dan NORGerbang Universal NAND dan NOR
Gerbang Universal NAND dan NORAnarstn
 
Dasar Telekomunikasi - Slide week 3 informasi
Dasar Telekomunikasi - Slide week 3   informasiDasar Telekomunikasi - Slide week 3   informasi
Dasar Telekomunikasi - Slide week 3 informasiBeny Nugraha
 
Penyederhanaan Fungsi Boolean
Penyederhanaan Fungsi BooleanPenyederhanaan Fungsi Boolean
Penyederhanaan Fungsi BooleanFahrul Razi
 
Pertemuan 6 & 7 ars. gerbang logika
Pertemuan 6 & 7 ars. gerbang logikaPertemuan 6 & 7 ars. gerbang logika
Pertemuan 6 & 7 ars. gerbang logikaBuhori Muslim
 
Matching impedance
Matching impedanceMatching impedance
Matching impedanceampas03
 

Was ist angesagt? (20)

1 sinyal
1  sinyal1  sinyal
1 sinyal
 
1 konsep sinyal
1 konsep sinyal1 konsep sinyal
1 konsep sinyal
 
Transformasi z
Transformasi zTransformasi z
Transformasi z
 
Teknik multiplex
Teknik multiplexTeknik multiplex
Teknik multiplex
 
8 kuantisasi
8 kuantisasi8 kuantisasi
8 kuantisasi
 
Fungsi alih sistem kontrol
Fungsi alih sistem kontrolFungsi alih sistem kontrol
Fungsi alih sistem kontrol
 
konsep dasar sinyal dan sistem
konsep dasar sinyal dan sistemkonsep dasar sinyal dan sistem
konsep dasar sinyal dan sistem
 
Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)
Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)
Telekomunikasi Analog dan Digital - Slide week 13 - modulasi gabungan (hybrid)
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led
 
Bab 7 multiplexing
Bab 7 multiplexingBab 7 multiplexing
Bab 7 multiplexing
 
Data Logging Tegangan melalui Komunikasi Serial
Data Logging Tegangan melalui Komunikasi SerialData Logging Tegangan melalui Komunikasi Serial
Data Logging Tegangan melalui Komunikasi Serial
 
Pemograman zelio soft 2
Pemograman zelio soft 2Pemograman zelio soft 2
Pemograman zelio soft 2
 
Gerbang Universal NAND dan NOR
Gerbang Universal NAND dan NORGerbang Universal NAND dan NOR
Gerbang Universal NAND dan NOR
 
Dasar Telekomunikasi - Slide week 3 informasi
Dasar Telekomunikasi - Slide week 3   informasiDasar Telekomunikasi - Slide week 3   informasi
Dasar Telekomunikasi - Slide week 3 informasi
 
Penyederhanaan Fungsi Boolean
Penyederhanaan Fungsi BooleanPenyederhanaan Fungsi Boolean
Penyederhanaan Fungsi Boolean
 
Makalah adc
Makalah adcMakalah adc
Makalah adc
 
Pushdown Automata
Pushdown Automata Pushdown Automata
Pushdown Automata
 
Dasar sistem kontrol
Dasar sistem kontrolDasar sistem kontrol
Dasar sistem kontrol
 
Pertemuan 6 & 7 ars. gerbang logika
Pertemuan 6 & 7 ars. gerbang logikaPertemuan 6 & 7 ars. gerbang logika
Pertemuan 6 & 7 ars. gerbang logika
 
Matching impedance
Matching impedanceMatching impedance
Matching impedance
 

Ähnlich wie Pemrograman Assembly Mikroprosesor 8086

LaTeX InDesign Crative Cloud
LaTeX InDesign Crative Cloud LaTeX InDesign Crative Cloud
LaTeX InDesign Crative Cloud Hirwanto Iwan
 
Modul peredam kejut sepeda motor
Modul peredam kejut sepeda motorModul peredam kejut sepeda motor
Modul peredam kejut sepeda motorruwaedi
 
Panduan penyusunan skripsi_ver3
Panduan penyusunan skripsi_ver3Panduan penyusunan skripsi_ver3
Panduan penyusunan skripsi_ver3rsd kol abundjani
 
Membuat Dokumen LaTeX Eleventh Edition
Membuat Dokumen LaTeX  Eleventh EditionMembuat Dokumen LaTeX  Eleventh Edition
Membuat Dokumen LaTeX Eleventh EditionHirwanto Iwan
 
Beamer ; Media Presentasi LaTeX
Beamer ; Media Presentasi LaTeXBeamer ; Media Presentasi LaTeX
Beamer ; Media Presentasi LaTeXHirwanto Iwan
 
Supriyanto s komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...
Supriyanto s   komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...Supriyanto s   komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...
Supriyanto s komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...Kira R. Yamato
 
Membuat Dokumen LaTeX edisi 13
Membuat Dokumen LaTeX edisi 13Membuat Dokumen LaTeX edisi 13
Membuat Dokumen LaTeX edisi 13Hirwanto Iwan
 
Membuat dokumen la tex edisi 12
Membuat dokumen la tex edisi 12Membuat dokumen la tex edisi 12
Membuat dokumen la tex edisi 12Hirwanto Iwan
 
Antena dan Propagasi Gelombang
Antena dan Propagasi GelombangAntena dan Propagasi Gelombang
Antena dan Propagasi GelombangHarry Ramza
 
Modul 5 lembar sebar
Modul 5   lembar sebarModul 5   lembar sebar
Modul 5 lembar sebarDessy Elfiya
 
Buku Ajar Mikrokontroler dan Interface.pdf
Buku Ajar Mikrokontroler dan Interface.pdfBuku Ajar Mikrokontroler dan Interface.pdf
Buku Ajar Mikrokontroler dan Interface.pdfSiswantoSpd
 
Struktur Baja: Desain dan Perilaku Jilid 2
Struktur Baja: Desain dan Perilaku Jilid 2Struktur Baja: Desain dan Perilaku Jilid 2
Struktur Baja: Desain dan Perilaku Jilid 2Nurul Angreliany
 
Membuat Dokumen LaTeX
Membuat Dokumen LaTeX Membuat Dokumen LaTeX
Membuat Dokumen LaTeX Hirwanto Iwan
 
TUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANG
TUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANGTUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANG
TUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANGRizal Budiarta
 
Membuat Dokumen LaTeX Edisi ke - 33
Membuat Dokumen LaTeX Edisi ke - 33Membuat Dokumen LaTeX Edisi ke - 33
Membuat Dokumen LaTeX Edisi ke - 33Hirwanto Iwan
 

Ähnlich wie Pemrograman Assembly Mikroprosesor 8086 (20)

mikrokontroler
mikrokontrolermikrokontroler
mikrokontroler
 
LaTeX InDesign Crative Cloud
LaTeX InDesign Crative Cloud LaTeX InDesign Crative Cloud
LaTeX InDesign Crative Cloud
 
Modul peredam kejut sepeda motor
Modul peredam kejut sepeda motorModul peredam kejut sepeda motor
Modul peredam kejut sepeda motor
 
Panduan penyusunan skripsi_ver3
Panduan penyusunan skripsi_ver3Panduan penyusunan skripsi_ver3
Panduan penyusunan skripsi_ver3
 
Letech indesign cc
Letech indesign ccLetech indesign cc
Letech indesign cc
 
Membuat Dokumen LaTeX Eleventh Edition
Membuat Dokumen LaTeX  Eleventh EditionMembuat Dokumen LaTeX  Eleventh Edition
Membuat Dokumen LaTeX Eleventh Edition
 
Beamer ; Media Presentasi LaTeX
Beamer ; Media Presentasi LaTeXBeamer ; Media Presentasi LaTeX
Beamer ; Media Presentasi LaTeX
 
Supriyanto s komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...
Supriyanto s   komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...Supriyanto s   komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...
Supriyanto s komputasi untuk sains dan teknik menggunakan matlab edisi 4 - ...
 
Membuat Dokumen LaTeX edisi 13
Membuat Dokumen LaTeX edisi 13Membuat Dokumen LaTeX edisi 13
Membuat Dokumen LaTeX edisi 13
 
Membuat dokumen la tex edisi 12
Membuat dokumen la tex edisi 12Membuat dokumen la tex edisi 12
Membuat dokumen la tex edisi 12
 
Algoritma dan pemrograman
Algoritma dan pemrogramanAlgoritma dan pemrograman
Algoritma dan pemrograman
 
Algoritma dan pemrograman
Algoritma dan pemrogramanAlgoritma dan pemrograman
Algoritma dan pemrograman
 
Antena dan Propagasi Gelombang
Antena dan Propagasi GelombangAntena dan Propagasi Gelombang
Antena dan Propagasi Gelombang
 
Modul 5 lembar sebar
Modul 5   lembar sebarModul 5   lembar sebar
Modul 5 lembar sebar
 
Buku Ajar Mikrokontroler dan Interface.pdf
Buku Ajar Mikrokontroler dan Interface.pdfBuku Ajar Mikrokontroler dan Interface.pdf
Buku Ajar Mikrokontroler dan Interface.pdf
 
Membuat Dokumen LaTeX
Membuat Dokumen LaTeXMembuat Dokumen LaTeX
Membuat Dokumen LaTeX
 
Struktur Baja: Desain dan Perilaku Jilid 2
Struktur Baja: Desain dan Perilaku Jilid 2Struktur Baja: Desain dan Perilaku Jilid 2
Struktur Baja: Desain dan Perilaku Jilid 2
 
Membuat Dokumen LaTeX
Membuat Dokumen LaTeX Membuat Dokumen LaTeX
Membuat Dokumen LaTeX
 
TUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANG
TUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANGTUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANG
TUGAS AKHIR PERENCANAAN JEMBATAN BANJIR KANAL TIMUR GAYAMSARI KOTA SEMARANG
 
Membuat Dokumen LaTeX Edisi ke - 33
Membuat Dokumen LaTeX Edisi ke - 33Membuat Dokumen LaTeX Edisi ke - 33
Membuat Dokumen LaTeX Edisi ke - 33
 

Mehr von Igun

Developing Systems Application Based on Android as Tool for Determinant Stunt...
Developing Systems Application Based on Android as Tool for Determinant Stunt...Developing Systems Application Based on Android as Tool for Determinant Stunt...
Developing Systems Application Based on Android as Tool for Determinant Stunt...Igun
 
Bahan Ajar Basis Data
Bahan Ajar Basis DataBahan Ajar Basis Data
Bahan Ajar Basis DataIgun
 
Bahan Ajar Praktikum Basisdata
Bahan Ajar Praktikum BasisdataBahan Ajar Praktikum Basisdata
Bahan Ajar Praktikum BasisdataIgun
 
Praktikum Jaringan Komputer zeroshell
Praktikum Jaringan Komputer zeroshellPraktikum Jaringan Komputer zeroshell
Praktikum Jaringan Komputer zeroshellIgun
 
Bahan Ajar Sistem Game
Bahan Ajar Sistem GameBahan Ajar Sistem Game
Bahan Ajar Sistem GameIgun
 
Bahan Ajar Sistem Game
Bahan Ajar Sistem GameBahan Ajar Sistem Game
Bahan Ajar Sistem GameIgun
 
Modul praktikum Pemrograman web Backend dengan Codeigniter dan LTE
Modul praktikum Pemrograman web Backend dengan Codeigniter dan LTEModul praktikum Pemrograman web Backend dengan Codeigniter dan LTE
Modul praktikum Pemrograman web Backend dengan Codeigniter dan LTEIgun
 
Modul Praktikum Algoritma dan Pemrograman Visual Basic net
Modul Praktikum Algoritma dan Pemrograman Visual Basic netModul Praktikum Algoritma dan Pemrograman Visual Basic net
Modul Praktikum Algoritma dan Pemrograman Visual Basic netIgun
 
Modul praktikum Pemrograman Frontend dengan Code Igniter dan Bootstrap
Modul praktikum Pemrograman Frontend dengan Code Igniter dan BootstrapModul praktikum Pemrograman Frontend dengan Code Igniter dan Bootstrap
Modul praktikum Pemrograman Frontend dengan Code Igniter dan BootstrapIgun
 
Modul praktikum Basisdata
Modul praktikum BasisdataModul praktikum Basisdata
Modul praktikum BasisdataIgun
 
Modul Bahasa Assembly
Modul Bahasa AssemblyModul Bahasa Assembly
Modul Bahasa AssemblyIgun
 
Bahan Ajar Keamanan Komputer dan Jaringan
Bahan Ajar Keamanan Komputer dan JaringanBahan Ajar Keamanan Komputer dan Jaringan
Bahan Ajar Keamanan Komputer dan JaringanIgun
 
Modul Perkuliahan Bahasa Assembly
Modul Perkuliahan Bahasa AssemblyModul Perkuliahan Bahasa Assembly
Modul Perkuliahan Bahasa AssemblyIgun
 
Modul Praktikum Jaringan Komputer
Modul Praktikum Jaringan KomputerModul Praktikum Jaringan Komputer
Modul Praktikum Jaringan KomputerIgun
 
Modul Praktikum Assembly
Modul Praktikum AssemblyModul Praktikum Assembly
Modul Praktikum AssemblyIgun
 
Bahan Ajar Pemrograman Assembly
Bahan Ajar Pemrograman Assembly Bahan Ajar Pemrograman Assembly
Bahan Ajar Pemrograman Assembly Igun
 
Bahan Ajar Sistem Game menggunakan Scratch
Bahan Ajar Sistem Game menggunakan ScratchBahan Ajar Sistem Game menggunakan Scratch
Bahan Ajar Sistem Game menggunakan ScratchIgun
 
Bahan Ajar Keamanan Informasi dan Jaringan
Bahan Ajar Keamanan Informasi dan JaringanBahan Ajar Keamanan Informasi dan Jaringan
Bahan Ajar Keamanan Informasi dan JaringanIgun
 
Decision Support System for Determination of Scholarship Using Scratch Progra...
Decision Support System for Determination of Scholarship Using Scratch Progra...Decision Support System for Determination of Scholarship Using Scratch Progra...
Decision Support System for Determination of Scholarship Using Scratch Progra...Igun
 
Developing systems application based on android as tool for determinant stunt...
Developing systems application based on android as tool for determinant stunt...Developing systems application based on android as tool for determinant stunt...
Developing systems application based on android as tool for determinant stunt...Igun
 

Mehr von Igun (20)

Developing Systems Application Based on Android as Tool for Determinant Stunt...
Developing Systems Application Based on Android as Tool for Determinant Stunt...Developing Systems Application Based on Android as Tool for Determinant Stunt...
Developing Systems Application Based on Android as Tool for Determinant Stunt...
 
Bahan Ajar Basis Data
Bahan Ajar Basis DataBahan Ajar Basis Data
Bahan Ajar Basis Data
 
Bahan Ajar Praktikum Basisdata
Bahan Ajar Praktikum BasisdataBahan Ajar Praktikum Basisdata
Bahan Ajar Praktikum Basisdata
 
Praktikum Jaringan Komputer zeroshell
Praktikum Jaringan Komputer zeroshellPraktikum Jaringan Komputer zeroshell
Praktikum Jaringan Komputer zeroshell
 
Bahan Ajar Sistem Game
Bahan Ajar Sistem GameBahan Ajar Sistem Game
Bahan Ajar Sistem Game
 
Bahan Ajar Sistem Game
Bahan Ajar Sistem GameBahan Ajar Sistem Game
Bahan Ajar Sistem Game
 
Modul praktikum Pemrograman web Backend dengan Codeigniter dan LTE
Modul praktikum Pemrograman web Backend dengan Codeigniter dan LTEModul praktikum Pemrograman web Backend dengan Codeigniter dan LTE
Modul praktikum Pemrograman web Backend dengan Codeigniter dan LTE
 
Modul Praktikum Algoritma dan Pemrograman Visual Basic net
Modul Praktikum Algoritma dan Pemrograman Visual Basic netModul Praktikum Algoritma dan Pemrograman Visual Basic net
Modul Praktikum Algoritma dan Pemrograman Visual Basic net
 
Modul praktikum Pemrograman Frontend dengan Code Igniter dan Bootstrap
Modul praktikum Pemrograman Frontend dengan Code Igniter dan BootstrapModul praktikum Pemrograman Frontend dengan Code Igniter dan Bootstrap
Modul praktikum Pemrograman Frontend dengan Code Igniter dan Bootstrap
 
Modul praktikum Basisdata
Modul praktikum BasisdataModul praktikum Basisdata
Modul praktikum Basisdata
 
Modul Bahasa Assembly
Modul Bahasa AssemblyModul Bahasa Assembly
Modul Bahasa Assembly
 
Bahan Ajar Keamanan Komputer dan Jaringan
Bahan Ajar Keamanan Komputer dan JaringanBahan Ajar Keamanan Komputer dan Jaringan
Bahan Ajar Keamanan Komputer dan Jaringan
 
Modul Perkuliahan Bahasa Assembly
Modul Perkuliahan Bahasa AssemblyModul Perkuliahan Bahasa Assembly
Modul Perkuliahan Bahasa Assembly
 
Modul Praktikum Jaringan Komputer
Modul Praktikum Jaringan KomputerModul Praktikum Jaringan Komputer
Modul Praktikum Jaringan Komputer
 
Modul Praktikum Assembly
Modul Praktikum AssemblyModul Praktikum Assembly
Modul Praktikum Assembly
 
Bahan Ajar Pemrograman Assembly
Bahan Ajar Pemrograman Assembly Bahan Ajar Pemrograman Assembly
Bahan Ajar Pemrograman Assembly
 
Bahan Ajar Sistem Game menggunakan Scratch
Bahan Ajar Sistem Game menggunakan ScratchBahan Ajar Sistem Game menggunakan Scratch
Bahan Ajar Sistem Game menggunakan Scratch
 
Bahan Ajar Keamanan Informasi dan Jaringan
Bahan Ajar Keamanan Informasi dan JaringanBahan Ajar Keamanan Informasi dan Jaringan
Bahan Ajar Keamanan Informasi dan Jaringan
 
Decision Support System for Determination of Scholarship Using Scratch Progra...
Decision Support System for Determination of Scholarship Using Scratch Progra...Decision Support System for Determination of Scholarship Using Scratch Progra...
Decision Support System for Determination of Scholarship Using Scratch Progra...
 
Developing systems application based on android as tool for determinant stunt...
Developing systems application based on android as tool for determinant stunt...Developing systems application based on android as tool for determinant stunt...
Developing systems application based on android as tool for determinant stunt...
 

Pemrograman Assembly Mikroprosesor 8086

  • 1. See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/338143747 PEMROGRAMAN BAHASA ASSEMBLY MIKROPROSESOR 8086 Book · December 2019 CITATIONS 0 READS 5,454 1 author: Some of the authors of this publication are also working on these related projects: Information Security View project Assembly Programming View project Indra Gunawan Sekolah Tinggi Teknologi Ronggolawe Cepu 12 PUBLICATIONS   1 CITATION    SEE PROFILE All content following this page was uploaded by Indra Gunawan on 29 January 2021. The user has requested enhancement of the downloaded file.
  • 2.
  • 3. INDRA GUNAWAN, ST., MKom., CEH., CHFI PEMROGRAMAN BAHASA ASSEMBLY MIKROPROSESOR 8086
  • 4. Pemrograman Assembly Mikroprosesor 8086 2 Pemrograman Assembly Mikroprosesor 8086 Penulis: Indra Gunawan Editor: Guepedia Tata Letak: Guepedia Sampul: Guepedia Diterbitkan Oleh: Guepedia The First On-Publisher in Indonesia E-mail: guepedia@gmail.com Fb. Guepedia Twitter. @guepedia Website: www.guepedia.com Hak Cipta dilindungi Undang-undang All right reserved
  • 5. Indra Gunawan, ST., M.Kom., CEH., CHFI 3 KATA PENGANTAR Terima kasih yang sebesar besarnya terutama kepada istri tercinta yang telah memberikan banyak dorongan, semangat dan doa sehingga buku ini dapat terselesaikan, dan tak lupa terima kasih kepada semua pihak yang turut membantu secara langsung maupun tidak langsung atas terbitnya buku ini. Semoga buku ini dapat bermanfaat bagi pembaca semuanya. Terima kasih Batam Penulis (Indra Gunawan) .
  • 6. Pemrograman Assembly Mikroprosesor 8086 4 Daftar Isi Bagian 1 Perkembangan Mikroprosesor................................. 8 Bagian 2 Komponen Dasar Mikroprosesor................................... 10 2.1 ARSITEKTUR MIKROPROSESOR 8086 ........................................ 10 2.1.1 BUS INTERFACE UNIT ............................................................ 11 2.1.2 EXECUTION UNIT................................................................... 13 Bagian 3 Interupsi........................................................................... 17 3.1 BIOS INTERRUPT ....................................................................... 18 3.2 DOS INTERRUPT ........................................................................ 20 Bagian 4 Memulai Assembly........................................................... 24 4.1 KODE EDITOR ........................................................................... 24 4.2 MENJALANKAN PROGRAM DOSBOX.......................................... 24 4.3 MENJALANKAN APLIKASI EMU8086......................................... 28 4.3 DEBUGGING DENGAN EMU8086............................................... 29 4.4 STRUKTUR KODE ASSEMBLY.............................................. 31 4.4.1 Sintak .Model ............................................................. 32 4.4.2 Sintak Org 100h......................................................... 32 4.4.3 Sintak .Code............................................................... 32 4.4.4 Sintak .Data ............................................................... 32 4.4.5 Sintak Label ............................................................... 32 Bagian 5 Transfer Data................................................................... 33 5.1 MOV ......................................................................................... 33 5.2 LOAD EFFECTIVE ADDRESS ...................................................... 34 5.3 LOAD SEGMENT REGISTER ....................................................... 35 5.4 EXCHANGE ............................................................................... 36 5.6 COMPARE ................................................................................. 38 5.7 TRANSLATE .............................................................................. 39 5.8 CONVERT.................................................................................. 41 Convert Byte To Word (Cbw) .................................................... 41 Convert Word To Double (Cwd)................................................ 41 Bagian 6 Cetak Karakter Dan Kalimat ......................................... 43 6.1 CETAK SATU KARAKTER (INT 21H/AH=02H) ........................... 43 6.2 CETAK BANYAK KARAKTER (INT 21H/AH=02H)...................... 44 6.3 CETAK KALIMAT DSENGAN PERULANGAN (INT 21H/AH=02H) 47 6.4 CETAK KALIMAT DENGAN VARIABEL (INT 21H/AH=09H) ....... 48
  • 7. Indra Gunawan, ST., M.Kom., CEH., CHFI 5 6.5 CETAK KALIMAT BERWARNA (INT 10H/AH=09H).................... 51 6.6 CETAK KALIMAT BERWARNA (INT 10H/AH=1300H)................ 52 6.7 CETAK KALIMAT BERWARNA REAL TIME ................................ 55 6.7.1 Cetak 1 Karakter............................................................... 55 6.7.2 Cetak Banyak Karakter..................................................... 57 6.7.3 Cetak Animasi Kalimat Menggunakan Memori Layar ..... 58 6.8 CETAK DARI INPUT KEYBOARD ................................................. 61 6.8.1 Baca 1 Karakter Dengan Int 16h/Ah=0h.......................... 62 6.8.2 Baca 1 Karakter Dengan Int 21h/Ah=01h........................ 63 6.8.2 Baca Banyak Karakter...................................................... 64 Bagian 7 Operasi Logika................................................................. 66 7.1 OPERASI AND ..................................................................... 66 7.2 OPERASI OR....................................................................... 68 7.3 OPERASI XOR ..................................................................... 70 7.4 OPERASI NOT ..................................................................... 72 Bagian 8 Tipe Data .......................................................................... 74 Bagian 9 Mode Pengalamatan ........................................................ 76 9.1 REGISTER ADDRESSING............................................................. 77 9.2 IMMEDIATE ADDRESSING ......................................................... 78 9.3 DIRECT MEMORI ADDRESSING ................................................. 79 9.4 INDIRECT MEMORI ADDRESSING .............................................. 80 9.5 BASE RELATIVE ADDRESSING .................................................. 83 9.6 DIRECT INDEX ADDRESSING..................................................... 84 9.7 SCALE FACTOR ADDRESSING.................................................... 87 Bagian 10 Array............................................................................... 91 10.1 ARRAY SATU DIMENSI............................................................ 91 10.2 ARRAY MULTI DIMENSI.......................................................... 94 Bagian 11 Percabangan Dan Perulangan ...................................... 99 11.1 LABEL..................................................................................... 99 11.2 PERCABANGAN DENGAN LOMPATAN ................................... 101 11.2.1 Lompatan Tanpa Syarat................................................ 102 11.2.2 Lompatan Bersyarat ..................................................... 104 11.3 PERULANGAN ....................................................................... 108 11.3.1 Perulangan Tanpa Syarat............................................. 108 11.3.2 Perulangan Bersyarat................................................... 111 Bagian 12 Stack (Tumpukan)........................................................ 113
  • 8. Pemrograman Assembly Mikroprosesor 8086 6 Bagian 13 Procedure Dan Macro .................................................. 116 13.1 PROSEDUR ........................................................................ 116 13.2 MACRO............................................................................. 121 Bagian 14 Operasi Aritmatika...................................................... 125 14.1 BILANGAN ............................................................................ 125 14.1.1 Mencetak Bilangan Desimal......................................... 126 14.1.2 Mencetak Bilangan Heksadesimal................................ 129 14.2 OPERASI PENAMBAHAN........................................................ 132 14.3 OPERASI PENGURANGAN ...................................................... 135 14.4 OPERASI PERKALIAN ............................................................ 137 14.5 OPERASI PEMBAGIAN ........................................................... 138 Bagian 15 Operasi File .................................................................. 141 Bagian 16 String............................................................................. 152 Bagian 17 Grafik Pada Assembly................................................. 157 17.1 GRAFIK TITIK PIXEL ............................................................. 157 17.2 GRAFIK GARIS LURUS .......................................................... 159 17.3 GRAFIK HURUF DENGAN GARIS LURUS ............................... 162 17.4 GRAFIK TABEL BINER........................................................... 165 17.5 GRAFIK TABEL BINER DENGAN KONTROL KEYBOARD ....... 171 Bagian 18 Interrupt Yang Sering Digunakan ............................. 177 18.1 INTERRUPT 21H (DOS SERVICE)............................................. 177 Int 21h / Ah=1h........................................................................ 177 Int 21h / Ah=2h........................................................................ 177 Int 21h / Ah=5h........................................................................ 177 Int 21h / Ah=6h........................................................................ 178 Int 21h / Ah=7h........................................................................ 179 Int 21h / Ah=9h........................................................................ 179 Int 21h / Ah=0ah...................................................................... 180 Int 21h / Ah=0bh...................................................................... 180 Int 21h/ Ah=0ch....................................................................... 180 Int 21h/ Ah= 19h...................................................................... 181 Int 21h/ Ah=2ah....................................................................... 181 Int 21h/ Ah= 39h...................................................................... 182 Int 21h/ Ah= 3ah...................................................................... 182 Int 21h/ Ah= 3bh...................................................................... 183 Int 21h/ Ah= 3ch...................................................................... 183
  • 9. Indra Gunawan, ST., M.Kom., CEH., CHFI 7 Int 21h/ Ah=3dh....................................................................... 184 Int 21h/ Ah= 3fh ...................................................................... 184 Int 21h/ Ah= 3eh...................................................................... 185 Int 21h/ Ah= 40h...................................................................... 186 Int 21h/ Ah= 41h...................................................................... 187 Int 21h/ Ah= 42h...................................................................... 187 Int 21h/ Ah= 47h...................................................................... 188 Int 21h/ Ah=4ch....................................................................... 189 Int 21h/ Ah= 56h...................................................................... 189 18.2 INTERRUPT 10H (GRAPHIC MODE )........................................ 190 18.3 INTERRUPT 16H (KEYBOARD SERVICE)................................... 201 18.4 INTERRUPT 19H (REBOOT) .................................................... 202 18.5 INTERRUPT 1AH/AH=00H (KOMPUTER TIME).................... 202 18.6 INTERRUPT 20H (END PROGRAM)...................................... 203 Daftar Pustaka ............................................................................... 204
  • 10. Pemrograman Assembly Mikroprosesor 8086 8 Bagian 1 Perkembangan Mikroprosesor Mikroprosesor atau sering disingkat dengan prosesor adalah produk dari pengembangan komputer era sebelumnya yang masih bersifat mekanis dan berukuran besar. Era mikroprosesor menandai diawalinya komputer berukuran kecil (komputer), mikroprosesor – mikroprosesor tersebut diantaranya dapat dilihat pada Tabel 1 berikut ini : Tabel 1 Perkembangan mikroprosesor (Brey, 2009). No Seri Penjelasan 1 Intel 4004  Rilis tahun 1946  4 bit  50.000 instruksi per detik  Dikembangkan selanjutnya menjadi seri Intel 4040 dengan penambahan kecepatan. 2 Intel 8008  Rilis tahun 1971  8 bit  16K byte memori 3 Intel 8080  Rilis tahun 1973  8 bit  64K byte memori  500,000 instruksi per detik 4 Intel 8085  Rilis tahun 1977  8 bit  769,230 instruksi per detik 5 Intel 8086  Mikroprosesor modern pertama.  16 bit  2,5 juta instruksi per detik
  • 11. Indra Gunawan, ST., M.Kom., CEH., CHFI 9 No Seri Penjelasan  Mampu mengalamatkan 1024K byte memori  Dikembangkan selanjutnya menjadi seri Intel 8080 dan 80286. 6 Intel 80386  Rilis tahun 1986  32 bit  4 Gigabyte memori 7 Intel 80486  Rilis tahun 1989  32 bit  Kecepatan 50Mhz 8 Intel 80586/Pentium  Rilis tahun 1993  Multi Core  32 bit  4 Gigabyte memori  Kecepatan lebih dari 3GHz  Dikembangkan menjadi banyak seri yaitu Pentium II, Pentium III, Pentium IV, Core2 9 Itanium  Rilis tahun 2002 gabungan antara perusahaan Intel dan Hewlett-Packard  Multi Core  64 bit  1 Tbyte Memori  Dikembangkan menjadi banyak seri Itanium 2, Itanium 9300, 9500, 9700
  • 12. Pemrograman Assembly Mikroprosesor 8086 10 Bagian 2 Komponen Dasar Mikroprosesor Mikroprosesor 8086 merupakan mikroprosesor modern pertama yang menjadi dasar arsitektur mikroprosesor selanjutnya, oleh karena itu seri 8086 inilah yang akan dipelajari di jurusan komputer dan turunannya. Gambar 1 menunjukkan bentuk fisik mikroprosesor 8086. Gambar 1 Mikroprosesor 8086 (General Software, 1998) 2.1 Arsitektur Mikroprosesor 8086 Arsitektur internal mikroprosesor 8086 terbagi menjadi 2 unit yaitu BIU(Bus Interface Unit) dan EU(Execution Unit).
  • 13. Indra Gunawan, ST., M.Kom., CEH., CHFI 11 Gambar 2 Skema Diagram Mikroprosesor 8086 (S. P. Das, 2019) 2.1.1 Bus Interface Unit Bus Interface Unit (BIU) secara umum mempunyai tugas :  Mengirim tugas ke bagian lain .  Mengambil instruksi dari memori.  Membaca/menulis perintah dari dan ke memori dan port.  Dapat dikatakan tugas BIU adalah pengalamatan dan transfer data. Komponen-komponen BIU adalah sebagai berikut : 1. Bus Adalah jalur data tempat mengalirnya instruksi dan data antar komponen. 2. Queue Pada dasarnya queue adalah kumpulan register yang berukuran 6 byte (1 byte=8bit) yang bertugas sebagai pintu antrian
  • 14. Pemrograman Assembly Mikroprosesor 8086 12 perintah sebelum masuk ke ALU. Queue akan terisi kembali dengan perintah dari BIU ketika isinya telah berkurang sebanyak 2byte/16bit karena masuk ke ALU. Mengapa harus ada queue ? Pada dasarnya memori lebih lambat daripada mikroprosesor sehingga untuk mempercepat proses pengiriman data antara memori dan mikroprosesor/mengurangi gap antar keduanya maka dibuatlah queue (media penyimpanan kecil) yang terletak di dalam mikroprosesor yg tugasnya sebagai media simpan sementara. 3. Segment Register Register sendiri adalah komponen penting mikroprosesor yang berupa memori kecil sebesar 16bit tiap-tiap registernya. Secara umum dapat dikatakan tugas register adalah menyimpan nilai yang diambil dari memori yang akan dieksekusi oleh ALU. Segment Register adalah salah satu dari register yang fungsinya menyimpan alamat memori fisik berupa segment address, terdapat 4 segment register yaitu :  Code segment (CS) register  Stack segment (SS) register  Extra segment (ES) register  Data segment (DS) register Keempat segment register tersebut mewakili alamat segment memori yang terdiri dari (Code segment, data segment, extra segment dan stack segment) yang dibagi- bagi lagi menjadi 16 logical segment yang tiap segmentnya berukuran 64 KByte. 4. Instruction Pointer
  • 15. Indra Gunawan, ST., M.Kom., CEH., CHFI 13 Adalah register 16 bit yang fungsinya menampung offset address memori fisik. Gabungan antara offset address dan segment address dari segment register akan menunjukkan posisi alamat fisik dalam memori. Contoh perhitungannya sebagai berikut : segment address - 1005H Offset address - 5555H segment address - 1005H - 0001 0000 0000 0101 Digeser 4-bit - 0001 0000 0000 0101 0000 + Offset address - 0101 0101 0101 0101 Physical address - 0001 0101 0101 1010 0101 1 5 5 A 5 Maka alamat fisik memorinya adalah 155A5H 2.1.2 Execution Unit Execution Unit (EU) secara umum mempunyai tugas :  Menerjemahkan perintah dari BIU  Mengeksekusi perintah dari BIU  Memberitahu BIU dari mana mengambil instruksi atau data. Komponen-komponen EU adalah sebagai berikut : 1. Arithmetic Logic Unit ALU (Arithmetic Logic Unit) adalah komponen inti dari mikroprosesor atau disebut otaknya komputer. Tugas ALU adalah mengeksekusi perintah yang berhubungan dengan aritmatika dan logika yaitu meliputi operasi-operasi : +,-,×,/ OR, AND, NOT 2. Flags Flags atau disebut flag register adalah salah satu register yang berfungsi menyimpan penandaan hasil operasi yang dikerjakan ALU, misalnya adalah menyimpan penandaan bahwa hasil operasi yang saat
  • 16. Pemrograman Assembly Mikroprosesor 8086 14 ini dikerjakan ALU adalah genap, ganjil, nol dan lain- lain. Flag register terdiri dari 9 bit yaitu :  Carry Flag : Berfungsi untuk menandai hasil operasi yang melebihi lebar general purpose register. Misalnya digunakan register 8 bit AL dan BH, dijumlahkan ternyata hasilnya 9 bit, maka operasi ini ditandai dengan 1 di carry Flag, sedangkan 1 bit sisanya disimpan di General purpose Register. Flag ini untuk menandai bilangan unsigned (tidak bertanda/bilangan positif saja).  Overflow Flag : sama seperti carry flag, tetapi untuk bilangan signed (bertanda/bilangan positif negatif).  Auxiliary Flag : Bernilai 1 jika operasi ALU pada 4 bit rendah melakukan operasi meminjam bit sebelah kirinya, dan bernilai 0 jika tidak.  Zero Flag : Bernilai 1 jika operasi ALU hasilnya nol, bernilai 0 jika operasi tidak nol.  Parity Flag: Bernilai 1 jika operasi ALU hasilnya genap, dan bernilai 0 jika ganjil.  Direction Flag : Bernilai 1, maka operasi ALU berjalan mundur, bernilai 0 berjalan maju.  Sign Flag : Bernilai 1 jika operasi ALU negatif, bernilai 0 jika positif.  Trap Flag : Untuk menandai proses debugging, bernilai 1 maka interrupt dilakukan dari device external.  Interrupt flag : Untuk menandai pengaktifan interrupt, bernilai 1 jika aktif, bernilai 0 jika tidak aktif.
  • 17. Indra Gunawan, ST., M.Kom., CEH., CHFI 15 3. Operand Operand adalah data yang dioperasikan, operand bisa berupa nilai, register, variabel. Contoh : Operasi ADD AL, 5h Pada operasi diatas, ADD adalah opcode, AL dan 5h adalah operand. 4. Instruction Decoder and Control Adalah komponen yang bertugas mengontrol ALU lintas antar komponen ALU, BIU dan memori sekaligus mendecode perintah dari BIU untuk diberikan ke ALU. 5. General purpose Register Adalah register yang dapat diisi nilai untuk dioperasikan. General purpose register dibagi menjadi 4 register 16 bit, yang terbagi-bagi lagi menjadi 8 bit high dan 8 bit low. Jika pada program ditulis mode 38086 dapat digunakan register 32bit. Register-register tersebut yaitu :  32-bit register (EAX, EBX, ECX, EDX, ESI, EDI, ESP, dan EBP).  16- register (AX, BX, CX, DX, SI, DI, SP, dan BP).  8-bit register (AH, BH, CH, DH, AL, BL, CL, dan DL) Penggunaan register ini berbeda-beda caranya tergantung operasi interrupt dan service yang digunakan (Intel, 1998). 6. Index Register dan Pointer Register Adalah register terdiri dari 4 register yaitu :  Stack Pointer : Register 16 bit yang berisi alamat offset stack pada stack segment di memori.  Base Pointer : Register 16 bit yang berisi alamat offset data pada stack segment di memori.  Source Index : Register 16 bit yang berisi alamat sumber pada operasi string.
  • 18. Pemrograman Assembly Mikroprosesor 8086 16  Destination Index : Register 16 bit yang berisi alamat tujuan pada operasi string.
  • 19. Indra Gunawan, ST., M.Kom., CEH., CHFI 17 Bagian 3 Interupsi Interupsi atau interrupt adalah sinyal yang digunakan sebagai metode untuk menghentikan sementara pekerjaan yang sedang dikerjakan mikroprosesor untuk melakukan pekerjaan yang sedang diinterupsikan. Prinsipnya mirip seperti sekelompok orang yang sedang rapat membahas suatu hal kemudian ada seseorang yang melakukan interupsi, maka pembicaraan rapat terhenti dan beralih sementara menuju orang yang sedang menginterupsi, setelah selesai dengan orang tersebut maka pembahasan beralih kembali ke pembicaraan rapat semula. Interrupt terbagi menjadi dua yaitu hardware interrupt dan software interrupt. 1. Hardware interrupt adalah jenis interrupt yang berasal dari perangkat keras. Ketika suatu device mengirim sinyal interrupt ke pin NMI dan INTR pada mikroprosesor maka mikroprosesor akan menghentikan pekerjaannya sementara dan akan mengeksekusi perintah dari device yang diinterupsikan. 2. Software interrupt adalah jenis interrupt yang berasal dari perangkat lunak. Terdapat 256 software interrupt yang memiliki kode 0 sampai 255 yang setiap kodenya khusus untuk melakukan suatu pekerjaan tertentu. DOS interrupt dan BIOS interrupt termasuk dalam interrupt jenis ini, selanjutnya buku ini akan lebih banyak membahas software interrupt karena erat kaitannya dengan bahasa assembly.
  • 20. Pemrograman Assembly Mikroprosesor 8086 18 3.1 BIOS Interrupt Adalah fasilitas interrupt untuk menghubungkan antara sistem operasi, program aplikasi, DOS dengan BIOS. Umumnya interrupt ini dipakai ketika suatu perangkat lunak membutuhkan hubungan dengan perangkat keras. Tabel 1 adalah daftar BIOS interrupt. Tabel 2 Daftar BIOS interrupt (General Software, 1998) Interrupt Type Function or Service 00h CPU Divide by zero trap 01h CPU Single-step trap 02h CPU NMI interrupt 03h CPU Breakpoint trap (INT 3) 04h CPU Arithmetic overflow trap 05h CPU Array bounds exception 06h CPU Invalid Opcode Trap 07h CPU Device Not Available Trap 08h IRQ0 18.2 Hz Timer Tick 09h IRQ1 Keyboard 0ah IRQ2 Cascaded toPIC 2 Interrupt Type Function or Service 0bh IRQ3 COM2 Serial Port 0ch IRQ4 COM1 Serial Port 0dh IRQ5 LPT2 Parallel Port 0eh IRQ6 Floppy Disk Controller 0fh IRQ7 LPT1 Parallel Port 10h Service Video Services 11h Service Equipment List Service 12h Service Low Memori Size Service
  • 21. Indra Gunawan, ST., M.Kom., CEH., CHFI 19 13h Service Floppy/IDE/ROM/Remote Disk Services 14h Service Serial Port Services 15h Service General Services, Up-Calls 16h Service Keyboard Services 17h Service Parallel Port Services 18h Up- Call Boot Fault Up-Call 19h Up- Call Bootstrap Up-Call 1ah Service Date/Time Services 1bh Up- Call Control-Break Up-Call 1ch Up- Call 18.2 Hz Application Timer Up- Call 1dh Table Pointer to Video Control Param Table 1eh Table Pointer to Diskette Parameter Table 1fh Table Pointer to Video Graphics Table Interrupt Type Function or Service 20h-3fh DOS -- reserved by DOS -- 40h Redire ctor Floppy disk services redirected by IDE 41h Table Fixed Disk Parameter Table (Drive 80h) 42h Extens ion EGA Default Video Driver 43h Extens ion Video Graphics Characters
  • 22. Pemrograman Assembly Mikroprosesor 8086 20 44h-45h N/A -- not used -- 46h Table Fixed Disk Parameter Table (Drive 81h) 47h-49h N/A -- open -- 4ah Up- Call User Alarm 4bh-6fh N/A -- open -- 70h IRQ8 Real-Time Clock Interrupt (1 Khz) 71h IRQ9 -- open -- 72h IRQ10 -- open -- 73h IRQ11 -- open -- 74h IRQ12 PS/2 Mouse 75h IRQ13 Math Coprocessor 76h IRQ14 IDE Drive Controller 77h IRQ15 APM Suspend Request 78h-ffh N/A -- open -- 3.2 DOS Interrupt Adalah interrupt yang input dan outputnya memakai aplikasi DOS. DOS interrupt berasal dari perangkat lunak yang membutuhkan output pada DOS. Sebagian DOS interrupt dapat dilihat pada table 2 dibawah ini. Contoh kode program penggunaan masing- masing interrupt pada Tabel 2 dapat dilihat pada Bagian 15.
  • 23. Indra Gunawan, ST., M.Kom., CEH., CHFI 21 H Description AH Description 1 Read character from STDIN 2 Write character to STDOUT 5 Write character to printer 6 Console Input/Output 7 Direct char read (STDIN), no echo 8 Char read from STDIN, no echo 9 Write string to STDOUT 0A Buffered input H Description AH Description 0B Get STDIN status 0C Flush buffer for STDIN 0D Disk reset 0E Select default drive Tabel 3 DOS interrupt
  • 24. Pemrograman Assembly Mikroprosesor 8086 22 19 Get current default drive 25 Set interrupt vector 2A Get system date 2B Set system date 2C Get system time 2D Set system time 2E Set verify flag 30 Get DOS version 35 Get Interrupt vector H Description AH Description 36 Get free disk space 39 Create subdirectory 3A Remove subdirectory 3B Set working directory 3C Create file 3D Open file
  • 25. Indra Gunawan, ST., M.Kom., CEH., CHFI 23
  • 26. Pemrograman Assembly Mikroprosesor 8086 24 Bagian 4 Memulai Assembly 4.1 Kode Editor Bahasa assembly dapat diketik pada beragam aplikasi text editor seperti notepad, wordpad, notepad++, sublime maupun langsung pada aplikasi emulator 8086 seperti DOSBOX atau emu8086. Buku ini akan menggunakan emu8086 sebagai editornya dengan pertimbangan kepraktisan. Gambar 3 Editor Emu8086. 4.2 Menjalankan Program DOSBOX Terdapat dua cara untuk mengkompilasi dan menjalankan program assembly, cara pertama dengan cara manual menggunakan DOSBOX, cara kedua otomatis menggunakan emu8086. Langkah-langkah menggunakan DOSBOX emulator 1. Instal DOSBOX 2. Ekstrak 8086.zip ke c:/8086 3. Klik DOSBOX option, lihat gambar 4
  • 27. Indra Gunawan, ST., M.Kom., CEH., CHFI 25 Gambar 4 DOSBOX option 4. Ketik mount c: c:/8086 pada file config DOSBOX, kemudian simpan, lihat gambar 5. Gambar 5 Konfigurasi DOSBOX Option. 5. Jalankan aplikasi DOSBOX
  • 28. Pemrograman Assembly Mikroprosesor 8086 26 6. Ketikkan c: 7. kemudian enter, lalu ketik edit Kemudian enter, akan muncul editor untuk mengetik kode assembly, ketikkan kode program assembly anda seperti pada gambar 6 Gambar 6 DOSBOX editor. 8. Untuk menyimpan, ketika alt+f, kemudian pilih save, beri nama pertama.asm lalu tekan enter, tekan lagi alt+f, pilih exit. 9. Untuk berpindah antar jendela windows dan DOSBOX gunakan alt+tab. 10. Untuk menjalankan program, ketikkan perintah-perintah seperti dibawah ini Tasm pertama.asm Tlink pertama.obj
  • 29. Indra Gunawan, ST., M.Kom., CEH., CHFI 27 Pertama.exe Gambar 7 Melakukan kompilasi kode menjadi exe 11. Untuk melakukan debug memori ketikkan Debug pertama.exe d Gambar 8 Debugging dengan memori 12. Untuk melakukan debug register ketikkan
  • 30. Pemrograman Assembly Mikroprosesor 8086 28 t secara berulang-ulang sampai baris program habis. Gambar 9 Debugging dengan Register 4.3 Menjalankan Aplikasi Emu8086 Buku ini untuk selanjutnya akan selalu menggunakan aplikasi emu8086 sebagai editornya. Untuk memulai aplikasi emu8086 lakukan langkah- langkah sebagai berikut : 1. Untuk memulai aplikasi, klik new. 2. Ketikkan kode program pada area putih. Perlu diperhatikan bahwa Emu8086 tidak membedakan huruf besar kecil. 3. Untuk menjalankan program klik emulate kemudian klik run.
  • 31. Indra Gunawan, ST., M.Kom., CEH., CHFI 29 Gambar 10 Memulai aplikasi Emu8086 4.3 Debugging dengan Emu8086 Salah satu kelebihan aplikasi Emu8086 dibanding DOSBOX adalah ketika melakukan debugging, kita dapat melihat semua bagian secara paralel baik itu debug memori, debug register, debug flag, debug variable, maupun debug stack. Langkah-langkah untuk melakukan debugging adalah sebagai berikut : 1. Untuk melakukan debug dengan melihat isi register klik emulate, klik menu debug kemudian klik menu single step berkali-kali sampai kode program sampai akhir, seperti gambar 11. 1 2
  • 32. Pemrograman Assembly Mikroprosesor 8086 30 Gambar 11 Debug register dengan Emu8086. 2. Untuk melakukan debug dengan melihat isi memori klik emulate, klik menu aux -> memori, ganti kolom segment dan offset (0700:0109) sesuai keinginan kemudian pilih update seperti gambar 12. 1 2 3
  • 33. Indra Gunawan, ST., M.Kom., CEH., CHFI 31 Gambar 12 Debug memori dengan Emu8086 4.4Struktur Kode Assembly Struktur kode assembly yang dibahas dibawah ini adalah struktur kode inti untuk menjalankan assembly, masih banyak sintak-sintak assembly yang bisa anda pelajari sendiri untuk menjadi lebih expert. .model small Org 100h .code label1: ; Tulis kode program disini End label1 .data ; Tulis data disini 1 2
  • 34. Pemrograman Assembly Mikroprosesor 8086 32 4.4.1 Sintak .MODEL Sintak ini berhubungan dengan penggunaan memori yang akan digunakan oleh assembly (S’to, 2001). Terdapat beberapa tipe .model yang dapat digunakan yaitu : .MODEL TINY : Hanya dapat digunakan 1 segment (program com) .MODEL SMALL : Kode dan Program < 64kb .MODEL MEDIUM : Program < 64kb, kode > 64kb .MODEL COMPACT : Program > 64kb, kode < 64kb .MODEL LARGE : Program dan kode > 64kb .MODEL HUGE : Program, kode dan array > 64kb 4.4.2 Sintak ORG 100H Adalah perintah yang digunakan pada assembly untuk memesan tempat pada memori sejumlah 100H (256byte). 4.4.3 Sintak .CODE Adalah perintah yang digunakan untuk menandai bahwa kode-kode perintah dibawahnya adalah kode program (bukan data). 4.4.4 Sintak .DATA Adalah perintah yang digunakan untuk menandai bahwa kode-kode perintah dibawahnya adalah data (bukan kode program). 4.4.5 Sintak Label Adalah perintah yang digunakan untuk mengelompokkan kode-kode program sehingga dapat digunakan untuk lompatan, perulangan dan lainnya. Dalam satu program dapat digunakan banyak label dengan nama bebas.
  • 35. Indra Gunawan, ST., M.Kom., CEH., CHFI 33 Bagian 5 Transfer Data Bagian ini akan membahas perintah-perintah assembly yang berkaitan dengan bagaimana mikroprosesor 8086 melakukan transfer data. Transfer data tersebut dapat berupa transfer antar register atau register ke memori. Metode transfer data tersebut atau biasa disebut dengan mode pengalamatan akan dibahas di Bagian yang lain. Perintah-perintah yang akan dibahas pada Bagian ini yaitu :  MOV  LOAD EFFECTIVE ADDRESS  LOAD SEGMENT REGISTER  EXCHANGE  BYTE SWAP  COMPARE  TRANSLATE  CONVERT (Cavanagh, 2013). 5.1 MOV MOV adalah perintah untuk menyalin data dari register ke register, register ke memori dan memori ke register. Format perintah MOV adalah : MOV Tujuan, Sumber Tujuan dan sumber dapat berupa register atau alamat memori. Cara berbagai macam pengalamatan dengan perintah MOV dapat dilihat pada Bagian mode pengalamatan. Contoh penggunaan perintah MOV dapat dilihat pada program #1 dibawah ini :
  • 36. Pemrograman Assembly Mikroprosesor 8086 34 ; Program #1 .MODEL SMALL ORG 100h .CODE MOV AX,0107H MOV [0108],03H MOV AL,A MOV AX,OFFSET A MOV AL,[0118] MOV BX,0106H MOV DL, BYTE PTR [BX] .DATA A DB 'Coba' Penjelasan :  MOV AX,0107H: Salin 0107H ke register AX  MOV [0108],03H : Salin 03H ke alamat 0108H  MOV AL,A : Salin karakter pertama pada varibel A ke register AL.  MOV AX,OFFSET A : Salin alamat offset A ke register AX  MOV AL,[0118] : Salin isi alamat 0118H ke register AL  MOV BX,0106H : Salin 0106H ke register BX  MOV DL, BYTE PTR [BX] : Salin isi alamat offset pada register BX sebanyak 1 byte ke register DL 5.2 Load Effective Address Load effective address adalah perintah untuk menyalin alamat offset ke suatu target operand, target operand dapat berupa register atau alamat memori. Format perintah Load effective address adalah : LEA Tujuan, Sumber
  • 37. Indra Gunawan, ST., M.Kom., CEH., CHFI 35 Perintah LEA dapat dilakukan juga dengan MOV dengan tujuan dan hasil yang sama dengan format berikut ini. LEA Tujuan, Sumber MOV Tujuan, Offset Sumber Contoh penggunaan perintah LEA dapat dilihat pada program #2 dibawah ini : ; Program #2 .MODEL SMALL ORG 100h .CODE LEA AX, A MOV AX, OFFSET A .DATA A DB 'Coba' Penjelasan : Dimisalkan alamat offset variabel A = 0108H, maka perintah LEA dan MOV diatas menghasilkan AX=0108H. 5.3 Load Segment Register Load segment register adalah perintah untuk menyalin isi segment register ke general purpose register. Variasi perintah ini ada dua macam yaitu LDS (Load data segment) dan LES (Load extra segment). LDS Tujuan, Sumber LES Tujuan, Sumber MOV Tujuan, Offset Sumber Contoh penggunaan perintah LDS dan LES dapat dilihat pada program #3 dibawah ini : ; Program #3 .MODEL SMALL .CODE LDS AX, A LES DX, A .DATA A DB 'Coba'
  • 38. Pemrograman Assembly Mikroprosesor 8086 36 5.4 Exchange Exchange adalah perintah untuk menukar data antar operand, operandnya dapat berupa register maupun memori. Format perintah exchange adalah : XCHG Tujuan, Sumber XCHG register/memori, register/memori Contoh penggunaan perintah exchange dapat dilihat pada program #4 dibawah ini : ; Program #4 .MODEL SMALL ORG 100H .CODE MOV BX, OFFSET X MOV AX,05H MOV DX,08H XCHG AX,DX XCHG [0110H], AX .DATA X DB 'Coba'
  • 39. Indra Gunawan, ST., M.Kom., CEH., CHFI 37 Gambar 13 Diagram alir program #4 (exchange). Penjelasan :  Offset variabel A adalah 0110H, AX=05H, BX=08H.  Perintah XCHG AX, DX menghasilkan perpindahan data register AX dengan register DX, AX=08H, BX=05H.  Perintah XCHG [0110H], AX menghasilkan perpindahan data isi alamat offset [0110H] dengan register AX, maka AX=6F43(String
  • 40. Pemrograman Assembly Mikroprosesor 8086 38 ‘Co’), alamat [0110H] =(08 00 62 61) H, jika dikonversi menjadi string adalah ‘..ba’. 5.6 Compare Compare adalah perintah assembly untuk membandingkan dua operand. Perintah ini tidak akan mengubah kedua operand tersebut, yang berubah nilai dari perintah compare adalah flag register. Flag register yang berubah tergantung perintah yang mengikuti compare. Format perintah compare adalah sebagai berikut : CMP Sumber1, Sumber2 Sumber1 dan sumber2 dapat berupa register, memori maupun nilai. CMP register/memori/nilai, register/memori/nilai Contoh penggunaan perintah compare dapat dilihat pada program #5 dibawah ini : ; Program #5 .MODEL SMALL ORG 100H .CODE MOV AX,05H MOV DX,08H CMP AX,DX CMP AX,06H CMP [0112H], 07H .DATA X db 'Coba'
  • 41. Indra Gunawan, ST., M.Kom., CEH., CHFI 39 Gambar 14 Diagram alir program #5 (compare). 5.7 Translate Translate adalah perintah pada assembly untuk menyalin isi data pada alamat data segment ke register AL. Untuk melakukan uji coba perintah ini, isilah terlebih dahulu register BX, lalu isilah alamat DS:[BX] dengan nilai tertentu, akhirnya lakukan perintah XLATB. Dengan cara ini dapat ditelusuri dengan mudah bahwa nilai 77H disalin dari alamat memori 0119H ke register AL. Contoh penggunaan perintah XLATB dapat dilihat pada program #6 dibawah ini : ; Program #6 .MODEL SMALL ORG 100H
  • 42. Pemrograman Assembly Mikroprosesor 8086 40 .CODE MOV BX,0119H MOV DS:[BX],77H XLATB Gambar 15 Diagram alir program #6 (translate). Penjelasan :  Isi alamat offset [0119H]=9090H  Perintah BX, 0119H menghasilkan nilai BX=0119H.
  • 43. Indra Gunawan, ST., M.Kom., CEH., CHFI 41  Perintah DS:[BX],77H menghasilkan alamat offset [0119H]=7790H  Perintah XLATB menghasilkan register AL=77H 5.8 Convert Convert Byte to Word (CBW) CBW adalah perintah pada assembly yang berfungsi untuk mengkonversi nilai register AL 8 bit menjadi nilai 16 bit. Konversi tersebut berjalan dengan cara menyalin keseluruhan nilai pada register AL ke register AH sehingga nilai AL dan AH menjadi sama. Convert Word to Double (CWD) CWD adalah perintah pada assembly yang berfungsi untuk mengkonversi nilai register AX 16 bit menjadi nilai 32 bit. Konversi tersebut berjalan dengan cara menyalin bit ke 15 register AX ke register DX, hasil akhir bilangan 32bit adalah pasangan register DX:AX. Contoh penggunaan perintah convert dapat dilihat pada program #7 dibawah ini : ; Program #7 .MODEL SMALL ORG 100H .CODE MOV AL,0FFH CBW MOV AX,-90D MOV DX,77H CWD MOV AX,90D CWD
  • 44. Pemrograman Assembly Mikroprosesor 8086 42 MOV AL,0FFH = Register AL=0FFH CBW Register AL=FFH AH=FFH AX=FFFFH MOV AX,-90D = Register AX=FFA6H MOV DX,77H = Register DX=77H CWD Register AX=FFA6H DX=0000H MOV AX,90H = Register AX=005AH CWD Register AX=005AH DX=FFFFH SELESAI MULAI Gambar 16 Diagram alir program #7 (CWD). Penjelasan :  Perintah CWB menyalain nilai AL ke AH, sehingga nilai AX=AH:AL.  Perintah CWD, jika AX bilangan negatif maka nilai DX=0000H, jika AX positif maka nilai DX=FFFFH.
  • 45. Indra Gunawan, ST., M.Kom., CEH., CHFI 43 Bagian 6 Cetak Karakter Dan Kalimat Bagian ini akan membahas tentang penggunakan tiga interrupt yaitu INT 21H service 02H, INT 21H service 09H dan INT 10H service 1300H. Ketiga interrupt tersebut beserta service nya dapat digunakan untuk mencetak karakter ke layar. Karakter yang dicetak dapat berasal dari string yang didalam program maupun dari input keyboard, tetapi dalam Bagian ini hanya membahas mencetak karakter dengan string berada didalam program. 6.1 Cetak satu karakter (INT 21H/AH=02H) Mencetak satu karakter ke layar tanpa warna dapat digunakan INT 21h service 02H. Untuk menggunakan interrupt ini caranya sangatlah mudah. Pertama isi register AH dengan nilai 2 heksadesimal, kedua isi register DL dengan string yang akan dicetak, ketiga lakukan INT 21H. Perlu diperhatikan bahwa register DL besarnya 8 bit maka hanya dapat menampung satu karakter saja. Kode program selengkapnya dapat dilihat pada program #8 dibawah ini. ; Program #8 .MODEL SMALL org 100h .CODE mov ah, 02h mov dl, 'A' int 21h int 20h
  • 46. Pemrograman Assembly Mikroprosesor 8086 44 Gambar 17 Diagram alir program #8 (cetak 1 karakter). Penjelasan : Tercetak string ‘A’.  AH = nilai service  DL = string yang akan dicetak 6.2 Cetak banyak karakter (INT 21H/AH=02H) Mencetak banyak karakter ke layar tanpa warna dapat digunakan INT 21h service 02H dengan cara diulang-ulang perintah interruptnya sebanyak karakter yang diinginkan, tetapi perlu diingat bahwa isi register DL harus diganti-ganti sesuai string yang akan dicetak. Kode program selengkapnya dapat dilihat pada program #9 dibawah ini. ; Program #9 .MODEL SMALL org 100h .CODE
  • 47. Indra Gunawan, ST., M.Kom., CEH., CHFI 45 mov ah,02h mov dl, 'A' int 21h mov dl,10 int 21h mov dl,13 int 21h mov dl, 'B' int 21h int 20h
  • 48. Pemrograman Assembly Mikroprosesor 8086 46 Gambar 18 Diagram alir program #9(Cetak banyak karakter). Penjelasan : Akan tercetak huruf A kemudian B dibawahnya.
  • 49. Indra Gunawan, ST., M.Kom., CEH., CHFI 47 6.3 Cetak Kalimat dsengan Perulangan (INT 21H/AH=02H) Untuk mencetak kalimat/banyak karakter dengan cara yang lebih elegan dan efisien adalah dengan menggunakan perulangan. Cara menggunakannya adalah letakkan perintah interrupt dalam suatu label, kemudian buat perulangan dengan loop terhadap label tersebut. Perlu anda perhatikan bahwa banyaknya perulangan sesuai nilai register CX. Kode program selengkapnya dapat dilihat pada program #10 dibawah ini. ; Program #10 .MODEL SMALL org 100h .CODE MOV AH,02h MOV DL,'A' MOV CX,03h Cetak: INT 21h INC DL LOOP Cetak INT 20h
  • 50. Pemrograman Assembly Mikroprosesor 8086 48 INT 21H Cetak ‘A’ LOOP Loop 3x Register AH=2 Register DL=’A’ Register CX=3H MULAI SELESAI Gambar 19 Diagram alir Program #10 (Cetak banyak karakter + loop). Penjelasan : Akan tercetak ‘ABC’. 6.4 Cetak Kalimat dengan Variabel (INT 21H/AH=09H) Mencetak kalimat atau banyak karakter dengan INT 21H service 09H memiliki pendekatan alur yang berbeda dengan program sebelumnya. Untuk menggunakan service ini, pertama, isi register AH dengan 09H, kedua, isi register DX dengan alamat offset variabel string dengan perintah LEA atau MOV. Ketiga, buat variabel/data terlebih dahulu. Variabel ini yang akan menampung string yang akan dicetak. Jangan lupa gunakan tipe data DB (1byte) pada variabel tersebut. Kode program selengkapnya dapat dilihat pada program #11 dibawah ini.
  • 51. Indra Gunawan, ST., M.Kom., CEH., CHFI 49 ; Program #11 .MODEL SMALL org 100h .CODE MOV AH,09h MOV DX,offset kal0 INT 21h LEA DX,kal0 INT 21h LEA DX,kal0+2 INT 21h LEA DX,kal1 INT 21h INT 20h .DATA kal0 DB 'Coba',13,10,'$' kal1 DB 'SETELAH $ TIDAK BISA DICETAK '
  • 52. Pemrograman Assembly Mikroprosesor 8086 50 Gambar 20 Diagram alir program #11(Cetak kalimat isi variabel). Penjelasan : Akan tercetak ‘Coba’, ‘ba’ dan ‘Setelah’.
  • 53. Indra Gunawan, ST., M.Kom., CEH., CHFI 51 6.5 Cetak Kalimat Berwarna (INT 10H/AH=09H) Untuk mencetak kalimat berwarna dapat digunakan INT 10H service 09H, akan tetapi interrupt ini memiliki kekurangan dibanding INT 10H service 1300H yaitu tidak ada fitur tebal tipis huruf, tidak ada fitur tulisan berkedip, dan warna yang dimiliki terbatas serta tidak dapat memposisikan tulisan secara bebas pada layar. Cara menggunakan interrupt ini adalah :  AH = nilai service, 09H  BL = atribut warna, 1 digit pertama warna tulisan, 1 digit sebelah kanan warna latar.  BH = halaman  CX = banyaknya karaktar yang akan dicetak Kode program selengkapnya dapat dilihat pada program #12 dibawah ini. ; Program #12 .MODEL SMALL ORG 100h .CODE MOV AH,09h MOV AL,'A' MOV BH,00h MOV BL,95h MOV CX,03h INT 10h INT 20h
  • 54. Pemrograman Assembly Mikroprosesor 8086 52 Gambar 21 Diagram alir program #12 (cetak kalimat warna) Penjelasan : Pada register BL, angka 9 adalah warna background sedangkan angka 5 adalah warna font. Register CX menentukan banyaknya karakter tercetak. 6.6 Cetak Kalimat Berwarna (INT 10H/AH=1300H) Mencetak berwarna tidak dapat dilakukan oleh INT 21H, maka kita akan menggunakan INT 10H service 1300 H. Interupt ini dapat digunakan untuk mencetak kalimat dengan warna latar dan font yang berwarna. Untuk menggunakan interrupt ini ketentuannya adalah sbb :  AX = nilai service, 1300H
  • 55. Indra Gunawan, ST., M.Kom., CEH., CHFI 53  BL = atribut warna, 3 digit kiri adalah warna font, Red Green Blue, 1 digit berikutnya untuk mengaktifkan tulisan kedip, 3 digit berikutnya adalah warna latar. 1 digit paling kanan adalah mengaktifkan tulisan tebal/tipis.  DL = koordinat X  DH =koordinat Y  CX = banyaknya karaktar yang akan dicetak  BP = menampung variabel kalimat Kode program selengkapnya dapat dilihat pada program #13 dibawah ini. ;Program #13 .MODEL SMALL org 100h .CODE MOV AX,1300h MOV BL,10010101b MOV BH,00 MOV DL,20 MOV DH,12 MOV CX,08H LEA BP,kal0 INT 10h INT 20h .DATA kal0 DB 'Uji coba'
  • 56. Pemrograman Assembly Mikroprosesor 8086 54 Gambar 22 Diagram alir program #13 (Cetak warna lanjutan) Penjelasan : Tercetak ‘Uji coba’ dengan warna sesuai isi register BL, pada halaman 0, baris ke 20 dan kolom ke 12. Konfigurasi properti register BL dapat dilihat pada gambar 23 dibawah ini.
  • 57. Indra Gunawan, ST., M.Kom., CEH., CHFI 55 Gambar 23 Konfigurasi INT 10H/AX=1300H (Cetak warna). 6.7 Cetak Kalimat Berwarna Real Time 6.7.1 Cetak 1 Karakter Pada pembahasan sebelumnya, mencetak kelayar pada pemrograman assembly selalu menggunakan interrupt, tetapi perlu diketahui bahwa ada metode lainnya untuk mencetak kelayar tanpa interrupt, Bagian ini akan membahas bagaimana mencetak karakter menggunakan memori layar. Kelebihan metode ini adalah dapat menampilkan karakter ke layar secara real time yaitu dapat merubah-rubah karakter pada posisi koordinat x dan y yang sama (seperti animasi) baik karakternya, warna tulisannya maupun warna latarnya. Metode tanpa interrupt ini melibatkan alamat memori pada segment ke 0B800H:offset, ketika data pada alamat ini diganti-ganti melalui perulangan misalnya, maka tampilan di layar juga akan berganti- ganti seketika. Jadi metode ini cocok untuk membuat animasi tulisan berbasis assembly. Contoh penggunaan memori layar dan hasilnya dapat dilihat pada program #14 dan gambar #24 dibawah ini.
  • 58. Pemrograman Assembly Mikroprosesor 8086 56 Gambar 24 Hasil tampilan program #14 (memori layar) ;Program #14 cetak macro x,y,kal,atr MOV AX,0B800h MOV ES,AX MOV AH,Y MOV AL,160 MUL AH MOV BX,AX MOV AH,X MOV AL,2 MUL AH ADD BX,AX MOV AL,Kal MOV AH,Atr MOV ES:BX, AL MOV ES:BX+1,AH ENDM ;############### MACRO ########### .MODEL SMALL ORG 100h .CODE cetak 40 23 'A' 95 INT 20h
  • 59. Indra Gunawan, ST., M.Kom., CEH., CHFI 57 Gambar 25 Diagram alir program #14 (memori layar) 6.7.2 Cetak Banyak Karakter Untuk mencetak banyak karakter dengan memori layar metodenya sama dengan satu karakter, caranya
  • 60. Pemrograman Assembly Mikroprosesor 8086 58 adalah dengan mengulang-ulang metode cetak satu karakter dengan mengubah-ubah parameter koordinat x, y, warna, dan atribut. Contoh penggunaan memori layar dan hasilnya dapat dilihat pada program #15 dan gambar #26 dibawah ini. Gambar 26 Hasil program #15 (memori layar) ;Program 15 .MODEL SMALL ORG 100h .CODE cetak 40 15 'S' 95 cetak 41 15 'T' 97 cetak 42 15 'T' 65 cetak 40 17 'I' 23 cetak 41 17 'B' 35 cetak 42 17 'N' 63 cetak 43 17 'U' 58 cetak 40 19 'S' 14 cetak 41 19 'I' 37 cetak 42 19 'N' 33 cetak 43 19 'A' 48 INT 20h 6.7.3 Cetak animasi kalimat menggunakan memori layar Cetak animasi pada sub Bagian ini maksudnya adalah, lihat gambar 27 terdapat tulisan ‘Yayasan Ibnu Sina Batam’ dengan warna tulisan dan latar yang berbeda-beda. Jika menggunakan mode interrupt 10H maka hasilnya statis, tidak bisa berubah. Dengan
  • 61. Indra Gunawan, ST., M.Kom., CEH., CHFI 59 memori layar seperti pada program #16 tulisan tersebut akan terus berganti-ganti warna tulisan dan latarnya. Gambar 27 Hasil program #16 (animasi memori layar). ;Program #16 Delay MACRO x LOCAL Ulang mov dx,0h Ulang: inc dx cmp dx,x je ulang ENDM cetak macro x,y,kal,atr MOV AX,0B800h ; ES Menunjuk pada segment layar MOV ES,AX MOV AH,Y MOV AL,160 ; Hitung offset baris MUL AH ; Simpan hasilnya pada BX MOV BX,AX MOV AH,X MOV AL,2 ; Hitung offset kolom MUL AH ; Tambahkan hasilnya pada BX ADD BX,AX ; AL=karakter yang akan ditampilkan MOV AL,kal ; AH=Atribut yang akan ditampilkan
  • 62. Pemrograman Assembly Mikroprosesor 8086 60 MOV AH,atr ; Tampilkan Karakter dan atributnya MOV ES:BX,AL ; pada posisi kolom X dan baris Y MOV ES:BX+1,AH ENDM ;############### MACRO ########### .MODEL SMALL ORG 100h .CODE proses: ; Setiap selesai cetak kalimat, nol kan bx, set ulang kolom ke 40d xor bx,bx mov ah,017h mov kolom,ah proses3: ; menyimpan nilai bx untuk dipakai lg push bx mov dl,var[bx] cetak kolom baris dl warna ; isi bx dari stack pop bx ; naikkan nilai warna xor ah,ah mov ah,warna add ah,0Ah mov warna,ah ; naikkan nilai kolom xor ah,ah mov ah,kolom add ah,01h mov kolom,ah
  • 63. Indra Gunawan, ST., M.Kom., CEH., CHFI 61 ; sleep program dgn loop sebanyak 1111x agar animasi terlihat delay 0fffh ;naikkan nilai bx inc bx cmp bx,017H push bx je proses loop proses3 loop proses INT 20h .DATA jmp proses var db 'Yayasan Ibnu Sina Batam' warna db 0fh kolom db 017h baris db 0fh Penjelasan : Program #15 ini mirip dengan program #14, bedanya adalah ditambahkan delay sehingga perubahan warna tulisan dan latar antar karakter tidak terlalu cepat, selain itu digunakan perulangan yang bertujuan untuk merubah-rubah warna tulisan dan warna latar secara terus menerus. 6.8 Cetak Dari Input Keyboard Pada Bagian ini kita akan membahas bagaimana mencetak ke layar satu karakter dan banyak karakter yang berasal dari ketikan keyboard. Metode ini bekerja dengan cara menyimpan data ketikan keyboard pada register AL dan variabel. Ada tiga metode pembacaan keyboard menggunakan assembly yaitu :  Interrupt 16H Service 0H untuk membaca ketikan keyboard tanpa cetak ke layar.
  • 64. Pemrograman Assembly Mikroprosesor 8086 62  Interrupt 21H Service 01H untuk membaca ketikan keyboard sekaligus cetak ke layar.  Interrupt 21H Service 0AH untuk membaca ketikan keyboard banyak karakter . 6.8.1 Baca 1 Karakter dengan INT 16H/AH=0H Untuk membaca ketikan keyboard 1 karakter maka digunakan Interrupt 16H service 0H, interrupt ini hanya dapat membaca 1 karakter ketikan keyboard per interrupt, jika ingin dilakukan pembacaan banyak karakter, maka harus diulang-ulang interruptnya menggunakan perulangan seperti pada contoh. Contoh program interruptnya dapat dilihat pada program #17 dibawah ini. ;Program #17 .MODEL SMALL ORG 100h .CODE satu: mov AH,0H INT 16h LOOP satu
  • 65. Indra Gunawan, ST., M.Kom., CEH., CHFI 63 Gambar 28 Diagram alir program #17 (INT 16H/AH=0H) 6.8.2 Baca 1 Karakter dengan INT 21H/AH=01H Interrupt 21H service 1H hanya dapat membaca 1 karakter ketikan keyboard per interrupt, jika ingin dilakukan pembacaan banyak karakter, maka harus diulang-ulang interruptnya seperti pada contoh. Contoh program interrupt ini ada pada program#18 dibawah ini. ;Program #18 .MODEL SMALL ORG 100h .CODE satu: mov AH,1H INT 21h LOOP satu
  • 66. Pemrograman Assembly Mikroprosesor 8086 64 Gambar 29 Diagram alir program #18 (INT 21/AH=01H). 6.8.2 Baca Banyak Karakter Metode pembacaan ketikan keyboard yang ketiga ini melibatkan variabel dan interrupt 21H service 0AH. Untuk memakai cara ini harus dibuat variabel array tiga elemen untuk menyimpan hasil ketikan keyboard. Contoh program dan penjelasannya dapat dilihat pada program #19 dan gambar 30. ;Program #19 .MODEL SMALL ORG 100h .CODE MOV AH,0AH MOV DX,OFFSET var INT 21H .DATA var DB 9,?,9 DUP(?)
  • 67. Indra Gunawan, ST., M.Kom., CEH., CHFI 65 Gambar 30 Diagram alir program #19 (INT 21H/AH=0AH). Penjelasan : Variabel kata memiliki 3 elemen  Angka 9 paling kiri adalah 9 byte (9 karakter) maksimal yang bisa ditampung.  Tanda tanya ‘?’ akan terisi panjang karakter yang telah diketikkan pada keyboard.  Angka 9 paling kanan adalah 9 byte yang akan terisi karakter yang telah diketikkan pada keyboard.  Variabel kata ini akan terisi setelah pengguna menekan enter.
  • 68. Pemrograman Assembly Mikroprosesor 8086 66 Bagian 7 Operasi Logika Seperti pada umumnya bahasa pemrograman lainnya, assembly juga dapat melakukan berbagai operasi logika seperti AND, OR, XOR serta NOT. Operator-operator logika tersebut dapat dimanfaatkan dalam banyak hal. Contohnya dalam buku ini, operator AND akan digunakan untuk menggambar grafik (menemukan nilai 1 pada kumpulan angka biner), operator XOR digunakan untuk membuat nol isi register, operator NOT digunakan untuk menemukan lawan bit dari suatu nilai, dan terakhir operator OR digunakan untuk menemukan nilai 0 pada kumpulan angka biner. 7.1Operasi AND Operasi AND adalah operasi yang bernilai TRUE jika A dan B bernilai TRUE. Jika diterjemahkan kedalam bilangan biner artinya adalah apabila kita mempunyai dua variabel A dan B berisi bilangan biner dan dikenakan operasi AND, maka hasilnya bernilai 1 jika dan hanya jika A dan B bernilai 1, selain itu hasilnya 0. Untuk lebih mudahnya dapat dilihat pada gambar 31 dibawah ini. Gambar 31 Logika AND (Leiterman, 2010). Untuk menggunakan operasi AND dalam assembly silakan liat pada program #8 dibawah ini. ;Program #8 .MODEL SMALL org 100h .CODE
  • 69. Indra Gunawan, ST., M.Kom., CEH., CHFI 67 MOV AH,01H MOV BL,00H AND AH,BL Gambar 32 Diagram alir program #8 (operasi AND) Penjelasan : Program diatas tidak memiliki output sehingga untuk melihat hasilnya harus melalui debug register (silakan lihat Bagian 4.3), hasil debug registernya dapat dilihat pada debug #8 dibawah ini. Debug #8 AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC Pada awalnya nilai AH=00H, BL=00H. 0700:0100 B401 MOV AH, 01h AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC Dengan perintah MOV AH, 01h maka nilai AH menjadi 01H (tulisan merah). 0700:0102 B300 MOV BL, 00h AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC
  • 70. Pemrograman Assembly Mikroprosesor 8086 68 Dengan perintah MOV BL, 00h maka nilai BL menjadi 00H (tulisan merah). 0700:0104 22E3 AND AH, BL AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0106 NV UP EI PL ZR NA PE NC 0700:0106 90 NOP Dengan perintah AND AH,BL maka nilai AH menjadi 00H (AH sebagai hasil). 7.2Operasi OR Operasi OR adalah operasi yang bernilai TRUE jika A atau B bernilai TRUE. Jika diterjemahkan kedalam bilangan biner artinya adalah apabila kita mempunyai dua variabel A dan B berisi bilangan biner dan dikenakan operasi OR, maka hasilnya bernilai 1 jika A atau B bernilai 1, dan hanya bernilai 0 jika A dan B bernilai 0. Untuk lebih mudahnya dapat dilihat pada gambar 33. Gambar 33 Logika OR (Leiterman, 2010). Untuk menggunakan operasi OR dalam assembly silakan liat pada program #9 dibawah ini. ;Program #9 .MODEL SMALL org 100h .CODE MOV AH,01H MOV BL,00H OR AH,BL
  • 71. Indra Gunawan, ST., M.Kom., CEH., CHFI 69 Gambar 34 Diagram alir program #9(Operasi OR) Penjelasan : Program diatas tidak memiliki output sehingga untuk melihat hasilnya harus melalui debug register (silakan lihat Bagian 4.3), hasil debug registernya dapat dilihat pada debug #9 dibawah ini. Debug #9 AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC Kondisi awal 0700:0100 B401 MOV AH, 01h AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC Perintah MOV AH, 01H menjadikan AH = 01H.
  • 72. Pemrograman Assembly Mikroprosesor 8086 70 0700:0102 B300 MOV BL, 00h AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC Perintah MOV BL, 00H menjadikan BL = 00H. 0700:0104 0AE3 OR AH, BL AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0106 NV UP EI PL NZ NA PO NC Perintah OR AH, BL menjadikan AH = 01H. 7.3Operasi XOR Operasi XOR (Exclusive OR) adalah operasi yang bernilai TRUE jika salah satu A atau B bernilai TRUE. Jika diterjemahkan kedalam bilangan biner artinya adalah apabila kita mempunyai dua variabel A dan B berisi bilangan biner dan dikenakan operasi XOR, maka hasilnya bernilai 1 jika salah satu A atau B bernilai 1, dan hanya bernilai 0 jika A dan B sama-sama bernilai 0 atau sama-sama berniai 1. Untuk lebih mudahnya dapat dilihat pada gambar 35. Gambar 35 Operasi XOR (Leiterman, 2010). Untuk menggunakan operasi XOR dalam assembly silakan liat pada program #10 dibawah ini. ;Program #10 .MODEL SMALL org 100h .CODE MOV AH,01H MOV BL,00H XOR AH,BL
  • 73. Indra Gunawan, ST., M.Kom., CEH., CHFI 71 Gambar 36 Diagram alir program #10 (Operasi XOR) Penjelasan : Program diatas tidak memiliki output sehingga untuk melihat hasilnya harus melalui debug register (silakan lihat Bagian 4.3), hasil debug registernya dapat dilihat pada debug #10 dibawah ini. Debug #10 AX=0000 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC Kondisi awal 0700:0100 B401 MOV AH, 01h AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC Perintah MOV AH, 01h menjadikan AH=01H. 0700:0102 B300 MOV BL, 00h AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC Perintah MOV BL, 00h menjadikan BL=00H. 0700:0104 32E3 XOR AH, BL AX=0100 BX=0000 CX=0006 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0106 NV UP EI PL NZ NA PO NC Perintah XOR AH,BL menjadikan AH=01H.
  • 74. Pemrograman Assembly Mikroprosesor 8086 72 7.4Operasi NOT Operasi NOT adalah operasi lawan dari/negasi, jika variabel A bernilai 0 maka NOT A bernilai 1, demikian juga sebaliknya jika variabel A bernilai 1 maka NOT A bernilai 0. Untuk lebih mudahnya dapat dilihat pada gambar 37. Gambar 37 Operasi NOT (Leiterman, 2010). Untuk menggunakan operasi NOT dalam assembly silakan liat pada program #11 dibawah ini. ;Program #11 .MODEL SMALL org 100h .CODE MOV AH,01H NOT AH Gambar 38 Diagram alir program #11 (Operasi NOT)
  • 75. Indra Gunawan, ST., M.Kom., CEH., CHFI 73 Penjelasan : Program diatas tidak memiliki output sehingga untuk melihat hasilnya harus melalui debug register (silakan lihat Bagian 4.3), hasil debug registernya dapat dilihat pada debug #11 dibawah ini. Debug #11 AX=0000 BX=0000 CX=0004 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0100 NV UP EI PL NZ NA PO NC Kondisi awal 0700:0100 B401 MOV AH, 01h AX=0100 BX=0000 CX=0004 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0102 NV UP EI PL NZ NA PO NC Perintah MOV AH, 01H menjadikan AH=01H. 0700:0102 F6D4 NOT AH AX=FE00 BX=0000 CX=0004 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=0700 ES=0700 SS=0700 CS=0700 IP=0104 NV UP EI PL NZ NA PO NC Perintah NOT AH menjadikan AH=FEH. Penyelesaian dengan bilangan biner AH = 0000 0001 h NOT AH = 1111 1110 h = FEh
  • 76. Pemrograman Assembly Mikroprosesor 8086 74 BAGIAN 8 TIPE DATA Tipe data penting dalam suatu bahasa pemrograman, dengan adanya tipe data yang disesuaikan dengan kebutuhan program yang akan dibuat, maka program tersebut dapat menggunakan space pada memori secara lebih efisien dan optimal serta tidak membuang-buang space memori secara sia-sia. Tipe data pada assembly terdiri dari 5 (Dandamudi, 2005) yaitu :  DB (Define Byte) = 1 Byte  DW (Define Word) = 2 Byte  DD (Define DoubleWord) = 4 Byte  DQ (Define Quadword) = 8 Byte  DT (Define Ten Bytes)= 10 Byte Perlu diketahui bahwa tipe data DQ dan DT tidak dikenali oleh mikroprosesor 8086, karena kedua tipe data tersebut baru muncul pada mikroprosesor versi atasnya, maka emulator Emu8086 juga tidak dapat mengenali tipe data tersebut, jika anda ingin tetap mencoba tipe data tersebut, gunakan emulator lainnya seperti TASM dan NASM atau DOSBOX. Untuk memahami tipe data diatas, perhatikan program #12 dibawah ini beserta debugnya. ;Program #12 .MODEL SMALL ORG 100H .CODE .DATA
  • 77. Indra Gunawan, ST., M.Kom., CEH., CHFI 75 A DB 'z' B DB 'Uji coba dengan kalimat' C DB 3Ah D DW 123Fh E DD 98761234h Penjelasan : Program #12 diatas tidak memiliki output sehingga untuk melihat hasilnya harus melalui debug memori (silakan lihat Bagian 4.3), hasil debug memori dapat dilihat pada gambar 39 dibawah ini. Yang bertanda merah merupakan data pada variabel A, B, C, D, E dimana satu pasang nilai misalnya 55H (huruf ‘U’) berukuran 1 byte. Gambar 39 Debug #12 Memori
  • 78. Pemrograman Assembly Mikroprosesor 8086 76 Bagian 9 Mode Pengalamatan Instruksi perintah assembly pada mikroprosesor 8086 atau biasa disebut x86 memiliki beberapa macam ragam jumlah operand. Ada instruksi tanpa operand misalnya perintah RET (RETURN : kembali ke program utama). Ada instruksi dengan satu operand misalnya MUL AX (instruksi perkalian). Ada pula instruksi dengan dua operand, misalnya ADD AX, 05H (instruksi pertambahan) (Cavanagh, 2013, p. 86). Ragam cara operand/register dalam menerima nilai tersebut disebut dengan mode pengalamatan. Mode pengalamatan dalam assembly dibagi menjadi tujuh mode yaitu : Tabel 4 Tujuh mode pengalamatan N o Nama Mode Alat/ Metode Kecepata n/ Kapasitas 1 Register Addr GP Register/ Langsung Tertinggi/ Terkecil 2 Immediate Addr GP Register/ Langsung Sangat tinggi/ Terkecil 3 Direct Memori Addr GP Register +Memori/ Langsung Tinggi/ Kecil 4 Indirect Memori Addr GP Register +Memori/ Tidak Langsung Sedang/ Sedang
  • 79. Indra Gunawan, ST., M.Kom., CEH., CHFI 77 N o Nama Mode Alat/ Metode Kecepata n/ Kapasitas 5 Base Relatif Addr GP Register +Memori/ Tidak Langsung Sedang/ Sedang 6 Direct Index Addr GP Register +segmentRegist er + Memori/ Tidak Langsung Lambat/ Besar 7 Scale Factor Addr GP Register +segmentRegist er + Memori / Tidak Langsung Lambat/ Terbesar 9.1 Register Addressing Register addressing adalah mode pengalamatan tercepat dan terpendek, tercepat karena register diencode langsung kedalam instruksi, terpendek rutenya karena pengalamatan ini hanya melibatkan mikroprosesor saja tanpa melibatkan komponen lain seperti bus dan memori. Proses Diagram alir pada pengalamatan ini dapat dilihat pada gambar 40 dibawah ini.
  • 80. Pemrograman Assembly Mikroprosesor 8086 78 Gambar 40 Diagram alir register addressing. Contoh perintah assembly yang termasuk dalam register addressing adalah : INC AX DEC CX MOV AX,BX ADD AX,BX SUB AX,BX 9.2 Immediate Addressing Register addressing dan immediate addressing adalah mode pengalamatan tercepat karena hanya melibatkan mikroprosesor. Perbedaan keduanya adalah register addressing bekerja dengan cara mengkopi data antar register, sedangkan immediate register bekerja dengan cara mengisi register langsung dengan nilai. Proses Diagram alir pada pengalamatan ini dapat dilihat pada gambar 41 dibawah ini. Gambar 41 Diagram alir immediate addressing. Contoh perintah assembly yang termasuk dalam immediate addressing adalah : MOV AX, 05H MOV CL, 14H
  • 81. Indra Gunawan, ST., M.Kom., CEH., CHFI 79 ADD BX, 27H SUB AX, 44H 9.3 Direct Memori Addressing Direct memori addressing adalah mode pengalamatan dimana register diisi oleh nilai yang berasal dari alamat pada memori. Maka pengalamatan ini melibatkan mikroprosesor, memori dan bus sehingga relatif lebih lambat dibandingkan dengan dua mode pengalamatan sebelumnya. Contoh perintah assembly yang termasuk dalam direct memori addressing adalah : MOV BX, [0108] MOX AH, [0700] Contoh penggunaan direct memori addressing dapat dilihat pada program #13 dibawah ini : ;Program #13 .MODEL SMALL ORG 100H .CODE MOV AX,[0108] .DATA A DW 'Coba' Proses Diagram alir pada program #13 dapat dilihat pada gambar 42 dibawah ini.
  • 82. Pemrograman Assembly Mikroprosesor 8086 80 MOV AX,[0108] Data pada Offset 0108H (variabel A) = ‘Coba’ MULAI Register AX=’Coba’ SELESAI Gambar 42 Diagram alir program #13 (direct memori addressing). Penjelasan : Perintah diatas assembly akan mencari nilai pada alamat 0108h yaitu ‘Coba’ dan diisikan pada register AX. 9.4 Indirect Memori Addressing Base memori/register indirect addressing adalah mode pengalamatan dimana register diisi oleh nilai yang berasal dari alamat memori yang berada pada suatu register. Pengalamatan ini melibatkan mikroprosesor, memori dan bus. Perbedaan dengan pengalamatan sebelumnya, pada pengalamatan ini nilai alamat memori berada dalam register sehingga membutuhkan langkah yang lebih panjang sehingga kecepatannya lebih lambat.
  • 83. Indra Gunawan, ST., M.Kom., CEH., CHFI 81 Contoh perintah assembly yang termasuk dalam Base memori/register indirect addressing adalah : MOV AX, [BX] MOV BX, [BX] MOX DX, [CX] Contoh penggunaannya dapat dilihat pada program #13 dibawah ini : ;Program #13 .MODEL SMALL ORG 100H .CODE ;MOV BX, A (SALAH) MOV BX, OFFSET A ;(BENAR) MOV AX,[BX] .DATA A DW 'Coba' Proses diagram alir pada program #13 dapat dilihat pada gambar 43 dibawah ini.
  • 84. Pemrograman Assembly Mikroprosesor 8086 82 MOV AX, [BX] Variabel A = ‘Coba’ MULAI SELESAI MOV BX,OFFSET A Register BX = 0108H Register AX = ‘Coba’ Gambar 43 Diagram alir program #13 (indirect memori addressing). Perbedaan MOV BX, A dan MOV BX, OFFSET A adalah : MOV BX, A (Isi BX = 6F43H = ‘Coba’) MOV BX, OFFSET A (Isi BX = 0108H) Jika kemudian diberikan perintah MOV AX, [BX] yang artinya adalah mengisi AX dengan nilai pada alamat BX maka yang terjadi adalah : MOV BX, A MOV AX,[BX] Pada perintah diatas assembly akan mencari nilai pada alamat memori 6F43H yaitu kosong, maka AX = 0000h. MOV BX, OFFSET A MOV AX,[BX]
  • 85. Indra Gunawan, ST., M.Kom., CEH., CHFI 83 Sedang pada perintah diatas assembly akan mencari nilai pada alamat 0108h yaitu ‘Coba’. 9.5 Base Relative Addressing Base relatif addressing adalah mode pengalamatan dimana kita mengakses alamat asal suatu variabel array (base) yang alamat ini selanjutnya digunakan untuk mengakses elemen-elemen dalam array tersebut (relatif). Kecepatan pengalamatan ini lebih lambat dari pengalamatan sebelumnya seBagian untuk mengakses alamat memori (yang akan diisikan kedalam register tujuan), diperlukan akses ke register lain yang isinya adalah alamat variabel, barulah selanjutnya menuju ke memori untuk mengakses data array dan elemennya. Contoh perintah assembly yang termasuk dalam base memori/register indirect addressing adalah : MOV AX, [BX +1] MOX DX, [BX +2] Contoh penggunaannya dapat dilihat pada program #14 dibawah ini : ;Program #14 .MODEL SMALL ORG 100H .CODE MOV AX,[A+1] .DATA A DW 'Coba' Proses Diagram alir pada program #14 ini dapat dilihat pada gambar 44 dibawah ini.
  • 86. Pemrograman Assembly Mikroprosesor 8086 84 Gambar 44 Diagram alir program #14 (base relative addressing). Penjelasan : Kita umpamakan alamat offset A adalah 0106H. Maka perintah diatas menghasilkan AX=[0106H+1]=[0107H], selanjutnya assembly akan mencari isi alamat 0107H kedalam memori, dan data pada alamat 0107H adalah huruf ‘o’. Maka program diatas menghasilkan AX=’o’. 9.6 Direct Index Addressing Direct index addressing adalah mode pengalamatan dimana diperlukan segment register sebagai perantara antara general purpose register dan memori. Kecepatan pengalamatannya tentu saja lebih lambat dari pengalamatan sebelumnya karena melibatkan segment register. Contoh perintah assembly nya adalah : MOV DL, ES:[BX][SI] Contoh penggunaannya dapat dilihat pada program #15 dibawah ini : ;Program #15 .MODEL SMALL ORG 100H
  • 87. Indra Gunawan, ST., M.Kom., CEH., CHFI 85 .CODE MOV CX,9H MOV AX,0700H MOV ES, AX MOV BX,0119H XOR SI, SI MOV AH,02H Ulang: MOV DL,ES:[BX][SI] INT 21H INC SI Loop Ulang INT 20H .DATA A DB 'Coba saja'
  • 88. Pemrograman Assembly Mikroprosesor 8086 86 Gambar 45 Diagram alir program #15 (Direct Index Addressing) Penjelasan : Pada program #15 proses pengkopian data dari memori ke general purpose register memerlukan
  • 89. Indra Gunawan, ST., M.Kom., CEH., CHFI 87 segment register sebagai perantara. Hasil output dari program diatas adalah. DL=0700:0119+[0…12] DL=’Coba saja’ Jika dilihat kedalam memori, alamat 0700H:0119H adalah string ‘Coba saja’. 9.7 Scale Factor Addressing Scale factor addressing adalah mode pengalamatan yang biasa digunakan untuk mengakses array dan elemennya. Direct index dan scale factor adalah dua mode pengalamatan yang paling lambat karena melalui perantara segment register, dan sekaligus memiliki kapasitas terbesar karena berhubungan dengan data array banyak dimensi. Contoh perintah assembly nya adalah : MOV [BX][SI],’S’ MOV [BX][SI],01H Contoh penggunaannya dapat dilihat pada program #16 dibawah ini : ;Program #16 .MODEL SMALL ORG 100H .CODE XOR SI,SI MOV BX, OFFSET fak MOV CX,27d ulang: MOV AH,satu[SI] MOV [BX][SI],AH INC SI loop ulang XOR SI,SI MOV CX,27d MOV AH,02H
  • 90. Pemrograman Assembly Mikroprosesor 8086 88 ulang2: MOV DL,fak[SI] INT 21H INC SI loop ulang2 INT 20H .DATA satu DB '01',' ','informatika',10d,13d,'02',' ','industri' fak DB 1 DUP (?) Proses diagram alir pada program #16 ini dapat dilihat pada gambar 46 dibawah ini.
  • 91. Indra Gunawan, ST., M.Kom., CEH., CHFI 89 Gambar 46 Diagram alir Program #16 Penjelasan : Sebenarnya mikroprosesor 8086 tidak mengenal istilah array multidimensi dalam penyimpanan memori nya, array multidimensi hanyalah bersifat logika diatas program, sedangkan secara fisik penyimpannya
  • 92. Pemrograman Assembly Mikroprosesor 8086 90 teteplah seperti array linier satu dimensi, oleh karena itu untuk membuat array multidimensi dibutuhkan trik seperti pada program #16. Program diatas bekerja dengan cara mengkopy isi variabel satu kedalam array fak menggunakan loop kemudian mencetak isinya dengan INT 21H service 02H.
  • 93. Indra Gunawan, ST., M.Kom., CEH., CHFI 91 Bagian 10 Array Array merupakan kumpulan data yang bertipe data sama, dalam bidang lain disebut dengan himpunan. Array dapat berupa kumpulan data satu dimensi, dua dimensi maupun banyak dimensi. Semua bahasa pemrograman tingkat tinggi relatif lebih mudah dalam membuat array berdimensi, sedangkan dalam bahasa assembly khususnya pada mikroprosesor 8086 sebenarnya tidak mengenal istilah banyak dimensi, array dengan dimensi berapapun akan disimpan dalam memori dengan cara satu dimensi, maka diperlukan trik dalam membuatnya, pada sub Bagian selanjutnya akan dibahas array satu dimensi sampai banyak dimensi beserta contoh programnya. 10.1 Array Satu Dimensi Array satu dimensi dalam bahasa assembly dibuat dengan cara mendefisinikan suatu variabel, lalu menentukan tipe data yang sesuai dan kemudian mengisi data dengan dipisah koma. Data dapat dimasukkan berupa bilangan biner, desimal, oktal, heksadesimal maupun string. Contoh array satu dimensi dapat dilihat pada program #17 dibawah ini : ;Program #17 .MODEL SMALL ORG 100H .CODE XOR SI,SI MOV CX,5d MOV AH,02H ulang: MOV DL,kar[SI]
  • 94. Pemrograman Assembly Mikroprosesor 8086 92 INT 21H INC SI loop ulang INT 20H .DATA Kar DB '1','2','3','4','5'
  • 95. Indra Gunawan, ST., M.Kom., CEH., CHFI 93 Gambar 47 Diagram alir program #17 (Array 1 dimensi) Penjelasan : Program diatas akan melakukan perulangan 5 kali untuk mencetak angka 12345 ke layar. Untuk mendefinisikan string dalam array maka digunakan tanpa petik.
  • 96. Pemrograman Assembly Mikroprosesor 8086 94 10.2 Array Multi Dimensi Sesungguhnya array multi dimensi tidak dikenal dalam mikroprosesor 8086. Penyimpanan array multi dimensi dalam memori tetaplah seperti satu dimensi yaitu secara linier. Contoh dibuat array dua dimensi seperti dibawah ini : .DATA A DB 1,2,3,4,5 B DB 6,7,8,9,10 Jur DW 1 DUP(OFFSET A, OFFSET B) Maka sesungguhnya didalam memori, penyimpannya akan tetap linier seperti berikut ini : 1,2,3,4,5,6,7,8,9,10, Jur… Sehingga dalam pemrograman assembly, untuk membuat array multi dimensi diperlukan trik dalam membuat kode programnya. Yang perlu diperhatikan adalah :  Tentukan tipe data yang tepat, sesuaikan dengan lebar data pada tiap elemen.  Gunakan pointer untuk mengakses data per byte atau per word.  Gunakan tanda 0 sebagai pemisah antar elemen sebagai penanda untuk memudahkan pencarian.  Buatlah satu baris satu variabel, kemudian buat variabel lain sebagai array untuk menampung offset masing-masing variabel. Rumus untuk mengakses offset elemen adalah : Offset elemen : (baris x - 1 * 2) Misalnya ingin mengakses angka 8, maka langkah- langkahnya adalah : 1. Register SI = Jur [(2-1) * 2]= Jur [2] = 0601H
  • 97. Indra Gunawan, ST., M.Kom., CEH., CHFI 95 2. Register BL = Elemen Jur ke [SI]= 06H 3. Register BH= Elemen Jur ke [SI+1]= 01H 4. Register BX = 0106H 5. Lakukan loop sebanyak 5x(jumlah kolom=5) pada alamat [BX]. 6. Jika bertemu tanda 0 keluar dari loop, jika tidak terus lakukan loop dan naikkan nilai BX. 7. Jika Loop no 6 sudah berhenti, maka BX berisi OFFSET angka 8, misalkan BX=0108H. 8. Lakukan loop lagi untuk mencetak karakter pada alamat OFFSET [BX]/0108H. 9. Maka akan tercetak angka 8 Contoh array satu dimensi dapat dilihat pada program #18 dibawah ini : ;Program #18 ;Cetak 'Industri' .MODEL SMALL ORG 100H .CODE ;String ‘industri’ berada pada var D ;Letak 'OFFSET D' dalam array Jur ;Baris-1 * 2 = 4-1*2 = 6 ;index array dimulai dari 0 MOV SI,6H ;BX=OFFSET D ;Mengisi BX dengan cara terbalik MOV BL,BYTE PTR Jur[SI] MOV BH,BYTE PTR Jur[SI+1] ;Loop utk menemukan penanda 0 pd baris ke 4(variabel D) cek:
  • 98. Pemrograman Assembly Mikroprosesor 8086 96 MOV AL,BYTE PTR [BX] INC BX CMP AL,0 JNE cek MOV CX,8h JE ulang ;cetak 'industri' ;alamat offset 'industri' ada di BX ulang: MOV AH,02H MOV DL,BYTE PTR [BX] INT 21H INC BX loop ulang INT 20H .DATA A DB '00001',0,'Ekonomi',0,'Gedung A',0 B DB '00002',0,'Hukum',0,'Gedung B',0 C DB '00003',0,'Kimia',0,'Gedung C',0 D DB '00004',0,'Industri',0,'Gedung D',0 E DB '00005',0,'Biologi',0,'Gedung E',0 Jur DW 1 DUP(OFFSET A,OFFSET B,OFFSET C,OFFSET D,OFFSET E)
  • 99. Indra Gunawan, ST., M.Kom., CEH., CHFI 97 Gambar 48 Diagram alir program #19 (Array multi dimensi) Penjelasan :  Register SI = Jur [(4-1) * 2]= Jur [6]= 6501H  Register BL= Elemen Jur ke [SI]= 65H
  • 100. Pemrograman Assembly Mikroprosesor 8086 98  Register BH= Elemen Jur ke [SI+1]= 01H  Register BX = 0165H  Lakukan loop cek pada alamat [BX]/[0165H] sampai bertemu tanda 0 maka keluar dari loop, jika tidak ketemu terus lakukan loop dan naikkan nilai BX.  Jika Loop cek sudah berhenti, maka BX berisi OFFSET string ‘industri’, misalkan BX=0171H.  Lakukan loop lagi untuk mencetak karakter pada alamat OFFSET [BX]/0171H.  Maka akan tercetak string ‘industri’.
  • 101. Indra Gunawan, ST., M.Kom., CEH., CHFI 99 Bagian 11 Percabangan Dan Perulangan Percabangan dan perulangan merupakan dua hal yang harus ada dalam suatu bahasa pemrograman. Jika diperumpamakan baris program adalah jalan raya, maka percabangan mirip persimpangan jalan, tidak mungkin terjadi ada jalan raya tanpa persimpangan jalan. Demikian juga dengan perulangan, perulangan dapat diperumpamakan bundaran pada jalan raya. Percabangan berguna untuk mengarahkan program kepada sub rutin tertentu jika terpenuhi suatu syarat tertentu, sedang perulangan berguna untuk mengulang- ulang sub rutin tertentu dengan syarat tertentu. 11.1 Label Label merupakan bagian vital pada bahasa pemrograman assembly, label hanya diperlukan ketika digunakan percabangan dan perulangan. Aturan penulisan label adalah sebagai berikut :  Karakter awal label dapat berupa huruf a sampai z maupun karakter tertentu seperti @, $, _, ?.  Panjang label maksimal adalah 31 digit karakter.  Tidak boleh menggunakan kata-kata yang telah terpakai oleh assembly.  Setiap label harus unik, tidak boleh ada label yang sama salam satu program. (L. B. Das, 2010, p. 86) Contoh penggunaan label dapat dilihat pada program #19 berikut ini. ;Program #19 .MODEL SMALL
  • 102. Pemrograman Assembly Mikroprosesor 8086 100 ORG 100h .CODE MOV AH, 02H abcdefghijklnopqrstuvwxyz: MOV DL,'-' INT 21H @coba: MOV DL,'A' INT 21H #coba2: MOV DL,'B' INT 21H $coba3: MOV DL,'C' INT 21H _coba4: MOV DL,'D' INT 21H INT 20H
  • 103. Indra Gunawan, ST., M.Kom., CEH., CHFI 101 Gambar 49 Diagram alir program #19 (Label). 11.2 Percabangan dengan Lompatan Percabangan dengan lompatan pada assembly dilakukan dengan perintah JMP (Jump), terdapat dua macam jump yaitu bersyarat dan tanpa syarat.
  • 104. Pemrograman Assembly Mikroprosesor 8086 102 11.2.1 Lompatan Tanpa Syarat Lompatan tanpa syarat adalah jenis lompatan (jump) yang terjadi tanpa didahului oleh seBagian tertentu. Format perintah jump pada assembly adalah sebagai berikut : JMP Tujuan Tujuan dapat berupa label, register maupun alamat memori. Ketika baris program sampai pada kode JMP, maka program akan lompat menuju operand/tujuan yang ditunjuk oleh JMP tanpa syarat. Maka jenis jump ini dapat digunakan untuk berpindah antar label atau antar lokasi memori. Contoh penggunaan perintah JMP dapat dilihat pada program #20 dibawah ini.v ;Program #20 .MODEL SMALL ORG 100h .CODE @coba: MOV BX,0100H MOV AH, 02H MOV DL,'A' INT 21H JMP #cobalagi #cobalagi: JMP @coba
  • 105. Indra Gunawan, ST., M.Kom., CEH., CHFI 103 Gambar 50 Diagram alir program #20 (perintah JMP). Penjelasan : Ketika sampai pada baris JMP @coba, program akan lompat ke label @coba, dan akan melakukan perulangan tanpa henti.
  • 106. Pemrograman Assembly Mikroprosesor 8086 104 11.2.2 Lompatan Bersyarat Lompatan bersyarat adalah jenis lompatan (jump) yang terjadi dengan didahului oleh seBagian tertentu. Lompatan ini didahului perintah CMP (compare). Terdapat banyak perintah jump yang masuk dalam kategori jump bersyarat, perintah-perintah tersebut dapat dilihat pada tabel 5 berikut : Tabel 5 Jump bersyarat No Perintah Arti Kondisi 1 JA Jump if Above CF=0 dan ZF=0 2 JAE Jump if Above or Equal CF=0 3 JB Jump if Below CF=1 4 JBE Jump if Below Or Equal CF=1 atau ZF=1 5 JC Jump if Carry CF=1 6 JCXZ Jump if CX Zero CX=0 7 JE Jump if Equal ZF=1 8 JNA Jump if Not Above CF=1 atau ZF=1 9 JNAE Jump if Not Above or Equal CF=1 No Perintah Arti Kondisi 10 JNB Jump if Not Below CF=0 11 JNBE Jump if Not Below nor Equal CF=0 dan ZF=0
  • 107. Indra Gunawan, ST., M.Kom., CEH., CHFI 105 12 JNC Jump if no Carry CF=0 13 JNE Jump if Not Equal ZF=0 14 JNP Jump if No Parity PF=0 15 JNZ Jump if Not Zero ZF=0 16 JP Jump if Parity PF=1 17 JPE Jump if Parity Even PF=1 18 JPO Jump if Parity Odd PF=0 19 JZ Jump if Zero ZF=1 Contoh penggunaan perintah JMP dapat dilihat pada program #21 dibawah ini. ;Program #21 .MODEL SMALL ORG 100h .CODE @coba: MOV AH,02H MOV DL,’H’ CMP DL,’Z’ JA #cobalagi JB #cobacoba #cobalagi: INT 21H JMP #akhir #cobacoba: INT 21H JMP #akhir #akhir:
  • 109. Indra Gunawan, ST., M.Kom., CEH., CHFI 107 Gambar 51 Diagram alir program #21 (jump bersyarat). Penjelasan :
  • 110. Pemrograman Assembly Mikroprosesor 8086 108  Ketika perintah CMP DL,’Z’ dijalankan, komputer membandingkan nilai DL dan Z dan mengaktifkan sejumlah flag register.  Perintah JA #cobalagi melakukan cek ke register, jika nilai heksadesimal DL lebih tinggi dibanding nilai heksadesimal ‘Z’ maka lompat ke label #cobalagi.  Perintah JB #cobacoba melakukan cek ke register, jika nilai heksadesimal DL lebih kecil dibanding nilai heksadesimal ‘Z’ maka lompat ke label #cobacoba.  Berhubung nilai DL adalah ‘H’ dan nilai operand pada perintah CMP adalah ‘Z’ maka nilai DL lebih kecil maka perintah JB #cobacoba dieksekusi.  Label #cobacoba mencetak ke layar dengan INT 21H kemudian lompat tanpa syarat ke label #akhir.  Label #akhir mengakhiri program dengan perintah INT 20H. 11.3 Perulangan Perulangan pada assembly dapat dilakukan dengan perintah LOOP dan JMP. Perintah LOOP memberikan perulangan dengan kondisi, perintah JMP memberikan perulangan tanpa kondisi. 11.3.1 Perulangan Tanpa Syarat Perulangan tanpa syarat pada assembly dapat dilakukan dengan menggunakan dengan perintah JMP. Format penulisan perintahnya telah dibahas pada Bagian sebelumnya. Contoh programnya dapat dilihat pada contoh program #22 dibawah ini.
  • 111. Indra Gunawan, ST., M.Kom., CEH., CHFI 109 ;Program #22 .MODEL SMALL ORG 100h .CODE @coba: MOV AH,02H MOV DL,'C' INT 21H JMP @coba
  • 112. Pemrograman Assembly Mikroprosesor 8086 110 MULAI MOV AH, 02H MOV DL,’C’ INT 21H Register AH=02H Register AH=’C’ JMP @coba Tercetak ‘C' Label @coba LOOP Gambar 52 Diagram alir program #22 (JUMP) Penjelasan : Program #22 akan melakukan loop permanen tanpa henti karena perintah JMP selalu terjalankan dan tidak diberikan kondisi apapun yang bisa menyeBagiankan perintah JMP terlewati.
  • 113. Indra Gunawan, ST., M.Kom., CEH., CHFI 111 11.3.2 Perulangan Bersyarat Perulangan bersyarat pada assembly dapat dilakukan dengan menggunakan dengan perintah LOOP. Perintah LOOP berhubungan dengan register CX, perulangan dengan LOOP akan berhenti manakala isi register CX=0, sehingga untuk menentukan jumlah perulangannya, isi register CX dengan nilai tertentu. Format penulisan perintahnya adalah sebagai berikut: Label: LOOP Label Contoh programnya dapat dilihat pada contoh program #23 dibawah ini. ;Program #23 .MODEL SMALL ORG 100h .CODE MOV CX,03H @coba: MOV AH,02H MOV DL,'C' INT 21H LOOP label
  • 114. Pemrograman Assembly Mikroprosesor 8086 112 Gambar 53 Diagram alir program 23 (LOOP)
  • 115. Indra Gunawan, ST., M.Kom., CEH., CHFI 113 Bagian 12 Stack (Tumpukan) Stack (tumpukan) adalah komponen yang sangat penting dalam pemrograman assembly. Jika dibandingkan dengan bahasa pemrograman tingkat tinggi maka assembly memiliki perbedaan yang banyak, perbedaan tersebut yang menyeBagiankan stack sangat penting dalam pemrograman assembly dan kurang penting pada pemrograman tingkat tinggi. Pada pemrograman tingkat tinggi, umumnya nilai disimpan pada variabel (memori), variabel tersebut dapat dibuat sebanyak banyaknya sesuai besar memori komputer sehingga pada pemrograman tingkat tinggi hampir tidak diperlukan adanya stack. Lain halnya dengan assembly, pada assembly nilai tidak hanya disimpan pada variabel (memori) saja, tetapi juga disimpan pada register (mikroprosesor). Disisi lain banyaknya general purpose register hanya 8 buah (AH, AL, BH, BL, CH, CL, DH, DL). General purpose register ini sifatnya tumpuk timpa, artinya ketika suatu register diisi nilai, maka nilai yang lama hilang tanpa bekas. Jika program yang dibuat cukup banyak baris kodenya dan tanpa STACK maka tentu akan sangat sulit sekali. Sekarang bayangkan ada sebuah program assembly menjumlahkan deretan 100 angka sekuensial, assembly hanya mampu menjumlahkan 2 nilai dalam satu operasi, maka setiap penjumlahan 2 nilai, hasilnya harus disimpan untuk dijumlahkan lagi di angka berikutnya, dan register yang dipakai juga cuma itu-itu saja, maka disinilah fungsinya STACK yaitu sebagai media simpan sementara. STACK terdiri dari dua perintah yaitu PUSH dan POP. PUSH digunakan untuk menyimpan nilai ke stack memori, sedang POP digunakan untuk mengambilnya kembali. Format penulisan perintahnya adalah : PUSH operand
  • 116. Pemrograman Assembly Mikroprosesor 8086 114 POP operand Perintah PUSH dan POP hanya dapat digunakan pada register 16 bit (AX, BX, CX, DX). STACK mampu menyimpan data sebanyak 2byte x 5 baris. Tumpukan pada stack memori bersifat LIFO (last in first out), sehingga perintah PUSH dan POP harus dibalik urutannya dalam program. Contoh programnya dapat dilihat pada program #23 dibawah ini. ;Program #23 .MODEL SMALL ORG 100h .CODE MOV AX,01H MOV BX,02H MOV CX,03H MOV DX,04H PUSH AX PUSH BX PUSH CX PUSH DX POP DX POP CX POP BX POP AX
  • 117. Indra Gunawan, ST., M.Kom., CEH., CHFI 115 Gambar 54 Diagram alir program #23 (PUSH dan POP). Penjelasan : Program #23 diatas memperlihatkan bahwa jika urutan PUSH dan POP tidak dibalik, maka nilai registernya berbeda dengan kondisi sebelumnya.
  • 118. Pemrograman Assembly Mikroprosesor 8086 116 Bagian 13 Procedure Dan Macro Procedure dan macro dalam bahasa assembly ibarat procedure dan function dalam bahasa pemrograman tingkat tinggi, berbeda nama tetapi mempunyai fungsi yang mirip. Procedure dan macro adalah metode pada bahasa assembly untuk membuat program didalam program (sub rutin/sub program), keduanya digunakan untuk memecah program besar menjadi program-program kecil sehingga program lebih mudah untuk dibaca dan dipelihara. Perbedaan procedure dan macro mirip dengan perbedaan procedure dan function yaitu :  Procedure tidak bisa menerima parameter/variabel dari si pemanggil (program utama).  Hasil program yang menggunakan procedure lebih kecil ukurannya.  Hasil program yang menggunakan procedure lebih lambat aksesnya.  Procedure hanya dapat mengakses 1 segment yang sama. 13.1 Prosedur Prosedur digunakan ketika diinginkan untuk memecah-mecah program besar menjadi program- program kecil yang tidak berorientasi kecepatan akses, ukuran program kecil dan data yang digunakan kecil dan sederhana. Jika digunakan procedure maka komunikasi pertukaran data antara program utama dan procedure adalah melalui register, stack dan variabel. Format penulisan perintah procedure adalah sebagai berikut :
  • 119. Indra Gunawan, ST., M.Kom., CEH., CHFI 117 ;------------INI PROCEDURE--------- NAMA PROC NEAR ; tulis isi procedure disini NAMA ENDP ; ----------INI PROGRAM UTAMA------ .MODEL SMALL ORG 100h .CODE CALL NAMA Berikut ini adalah contoh-contoh program yang menggunakan procedure. ;Program #24 ;Cetak huruf Z .MODEL SMALL ORG 100h .CODE ;########### PROCEDURE cetak proc near mov ah,02h mov dl, 'z' int 21h ret cetak endp ;#### PROCEDURE call cetak int 20h Program #24 diatas dijelaskan dengan gambar 54 dibawah ini.
  • 120. Pemrograman Assembly Mikroprosesor 8086 118 MULAI CALL CETAK1 PROCEDURE CETAK MOV AH,02H MOV DL,’Z’ INT 21H Register AH=02H Register DL=’Z’ Tercetak Z Gambar 55 Diagram alir program #24 (procedure) Penjelasan : Perintah pertama yang dibaca assembly pada program #24 diatas adalah call cetak (program utama), kemudian melompat ke procedure, setelah selesai mengerjakan semua baris kode di procedure, maka melompat kembali ke program utama dan
  • 121. Indra Gunawan, ST., M.Kom., CEH., CHFI 119 mengerjakan perintah INT 20H. Proram #24 diatas mencetak satu huruf ‘Z’ ke layar. Program #25 dibawah ini untuk mencetak kata ‘SATU’ melalui variabel. ;Program #25 ;Cetak ‘SATU’ .MODEL SMALL ORG 100h .CODE ;################## PROCEDURE cetak1 proc near mov ah,02h mov dl, var[0] int 21h cetak1 endp cetak2 proc near mov ah,02h mov dl, var[1] int 21h cetak2 endp cetak3 proc near mov ah,02h mov dl, var[2] int 21h cetak3 endp cetak4 proc near mov ah,02h mov dl, var[3] int 21h ret cetak4 endp ;##### PROGRAM UTAMA ###### call cetak1 call cetak2
  • 122. Pemrograman Assembly Mikroprosesor 8086 120 call cetak3 call cetak4 int 20h .DATA var db 'satu' Program #25 diatas dijelaskan dengan gambar 56 dibawah ini. Gambar 56 Diagram alir program #25 (procedure) Penjelasan : Pada program #25 diatas program utama dieksekusi terlebih dahulu dengan perintah call cetak1, call cetak2, call cetak3, call cetak4, kemudian setelah masing-masing procedure menjalankan programnya
  • 123. Indra Gunawan, ST., M.Kom., CEH., CHFI 121 masing-masing selanjutnya kembali ke program utama. Program #25 diatas mencetak kata ‘SATU’. 13.2 Macro Macro digunakan ketika diinginkan kondisi untuk memecah-mecah program menjadi subprogram yang lebih kecil yang penggunaan datanya komplek dan besar, ukuran file program lebih besar, kecepatan akses lebih tinggi. Macro dapat melakukan komunikasi pertukaran data dengan program utama melalui parameter, menggunakan register maupun variabel dan stack memori. Format penulisan perintah procedure adalah sebagai berikut : ;------------INI MACRO--------- NAMA MACRO param1,param2,param3...dst ; tulis isi macro disini ENDM ; ----------INI PROGRAM UTAMA------ .MODEL SMALL ORG 100h .CODE NAMA nilai1,nilai2,nilai3 Berikut ini adalah contoh-contoh program yang menggunakan macro. ;Program #26 ;Cetak ‘aku’ ;########### MACRO ############ cetak macro x mov ah,02h mov dl,x int 21h endm ;########### MACRO ############ .MODEL SMALL ORG 100h
  • 124. Pemrograman Assembly Mikroprosesor 8086 122 .CODE cetak 'a' cetak 'k' cetak 'u' int 20h Gambar 57 Diagram alir program #26 (Macro). Penjelasan : Program berjalan dimulai dari program utama, memanggil Cetak ‘A’, Cetak ‘k’, Cetak ‘u’. Macro Cetak menerima parameter ‘A’,’k’,’u’ sebagai variabel x, variabel x dimasukkan ke register DL kemudian dilakukan INT 21. Maka tercetak kata ‘Aku’. ;Program #27
  • 125. Indra Gunawan, ST., M.Kom., CEH., CHFI 123 ;Macro multi parameter ;################## MACRO cetak macro x, y, z, a mov dl, x int 21h mov dl, y int 21h mov dl, z int 21h mov dl, a int 21h endm ;################## MACRO .MODEL SMALL ORG 100h .CODE mov ah,02h cetak var[0],var[1],var[2], var[3] int 20h .DATA var db 'satu'
  • 126. Pemrograman Assembly Mikroprosesor 8086 124 MULAI Cetak var[0].var[1], var[2],var[3] = Cetak ‘s’,’a’,’t’,’u’ Cetak Macro x,z,y,a MOV AH,02H MOV DL,y INT 21H Register AH=02H Register DL,x Tercetak ‘satu’ Variabel var = ‘satu’ MOV DL,a MOV DL,z MOV DL,x Register DL,z Register DL,y Register DL,a SELESAI Gambar 58 Diagram alir program #27 (macro). Penjelasan : Progam #27 dimulai dengan perintah MOV ah,02H, kemudian memanggil macro cetak dengan mengirim parameter s,a,t,u. Macro cetak menerima nilai tersebut dan memasukkan ke register DL, kemudian INT 21 akan mencetak kelayar kata ‘satu’.
  • 127. Indra Gunawan, ST., M.Kom., CEH., CHFI 125 Bagian 14 Operasi Aritmatika Membahas operasi aritmatika tentu tidak bisa lepas dari bahasan bilangan. Bagian ini akan diawali pembahasan tentang 4 jenis bilangan yang mampu dibaca oleh assembly, kemudian dilanjutkan pembahasan tentang empat operasi aritmatika yaitu penambahan, pengurangan, perkalian, pembagian. 14.1 Bilangan Bahasa assembly mampu membaca berbagai jenis bilangan yaitu desimal, oktadesimal, heksadesimal, dan biner. Bagaimana assembly membedakan bilangan- bilangan tersebut ?, tentu saja pembuat program harus menuliskan jenis bilangan pada akhir suatu bilangan, contohnya adalah seperti berikut : Gambar 59 Menulis bilangan pada assembly. Penjelasan :  Baris 06. Bilangan biner  Baris 07. Bilangan heksadesimal  Baris 08. Bilangan oktadesimal  Baris 09. Bilangan desimal
  • 128. Pemrograman Assembly Mikroprosesor 8086 126 Perlu diketahui bahwa meskipun pembuat program dapat memasukkan empat jenis bilangan pada assembly secara bersama-sama, tetapi data pada register dan memori akan tampil dalam format heksadesimal, sehingga jika misalnya pada program dimasukkan angka dalam format desimal kemudian dilakukan operasi aritmatika, maka jika ingin dilakukan debugging register maupun memori untuk melihat hasilnya, harus dikonversi terlebih dahulu dipikiran angka-angka tersebut menjadi format heksadesimal sehingga proses debugging menjadi lebih mudah. 14.1.1 Mencetak bilangan desimal Mencetak bilangan pada assembly sangatlah berbeda dengan bahasa pemrograman tingkat tinggi. Pada bahasa pemrograman tingkat tinggi mencetak bilangan sama mudahnya dengan mencetak string maupun mencetak lainnya, semua dilakukan secara otomatis dibelakang layar tanpa dibutuhkan andil si pembuat program. Lain halnya pada assembly, semua dilakukan manual. Tidak ada cara otomatis pada assembly. Jika ingin dicetak kelayar bilangan desimal maka dibutuhkan sedikit trik untuk melakukannya. Semua karakter yang tampil di layar berpatokan pada tabel ASCII dalam mencetaknya. Program #28 dibawah ini adalah program untuk mencetak bilangan desimal. ; Program #28 .MODEL SMALL ORG 100h .CODE ; AX = angka yang akan dicetak MOV AX,angka ; BX = penyebut MOV BX,10 ; CX = 0 XOR CX,CX
  • 129. Indra Gunawan, ST., M.Kom., CEH., CHFI 127 Ulang: ; Cegah sisa bagi menjadi pembilang ! XOR DX,DX ; Bagi angka yang akan dicetak dengan 10 DIV BX ; Simpan sisa bagi dalam stack PUSH DX ; CX ditambah 1 INC CX ; Apakah hasil bagi sudah habis ? CMP AX,0 ; Jika belum, ulangi lagi ! JNE Ulang Cetak: ; Ambil 1 angka yang disimpan POP DX ; Ubah angka tersebut dalam kode ASCII ADD DL,'0' ; Cetak angka tersebut MOV AH,02 INT 21h ; ulangi LOOP Cetak INT 20h .DATA ; Angka yang akan dicetak angka DW 243
  • 130. Pemrograman Assembly Mikroprosesor 8086 128 Gambar 60 Diagram alir program #28 (mencetak desimal) Penjelasan : Prinsip kerja program #28 diatas adalah.  Jika ingin dicetak nilai x, maka bagi nilai x dengan 10 dengan operator DIV.
  • 131. Indra Gunawan, ST., M.Kom., CEH., CHFI 129  Sisa dari pembagian tersebut simpan pada STACK.  Bagi terus bilangan x sampai habis.  Jika sudah habis terbagi, ambil angka-angka yang tersimpan pada STACK secara berurutan.  Tambahkan angka-angka yang telah diambil dari STACK dengan string ‘0’, kemudian cetak satu persatu sampai isi STACK kosong.  Maksud dari ditambah string ‘0’ adalah untuk mengubah angka menjadi kode ASCII. Misal angka dari STACK adalah 4 ditambah string ‘0’ (30H) = 30H+4H=34H (angka 4 desimal). 14.1.2 Mencetak bilangan heksadesimal Meskipun bilangan heksadesimal adalah bilangan yang utama pada assembly yaitu bilangan yang tampil pada saat debugging di memori dan register, namun mencetaknya ke layar adalah hal lain. Mencetak ke layar selalu berpatokan dengan tabel ASCII. Program #29 dibawah ini adalah program untuk mencetak angka heksadesimal. ; Program #29 Cetak MACRO MOV DL,heksa[BX] MOV AH,02 INT 21h ENDM .MODEL SMALL ORG 100h .CODE ; Jadikan BH=0 SUB BH,BH ; BL = angka yang akan dicetak
  • 132. Pemrograman Assembly Mikroprosesor 8086 130 MOV BL,angka ; Simpan angka tersebut PUSH BX ; Ambil 4 bit tinggi dari + MOV CL,4 ; BL untuk dicetak SHR BL,CL ; Cetak 1 angka heksadesimal tingginya Cetak ; Ambil angka yang disimpan POP BX ; Ambil 4 bit rendah dari + AND BL,0Fh ; BL untuk dicetak Cetak INT 20h .DATA Heksa DB '0123456789ABCDEF' ; Angka yang akan dicetak 255=7Bh angka DB 123d
  • 133. Indra Gunawan, ST., M.Kom., CEH., CHFI 131 Ga mbar 61 Diagram alir program #29 (mencetak heksadesimal). Penjelasan : Prinsip utama program #29 diatas adalah.
  • 134. Pemrograman Assembly Mikroprosesor 8086 132  Membagi bilangan yang ingin dicetak misalnya 7BH dengan 2 digit.  Digit 7 kiri diambil dengan cara menggeser bilangan tersebut 4 kali kekanan, hasilnya simpan dalam BX, BX=07H.  Cetak elemen array variabel heksa ke BX, misalnya cetak heksa[7]= ‘7’.  Digit B kanan diambil dengan cara melakukan operasi AND 0FH ke bilangan yang ingin dicetak tersebut. Hasilnya simpan pada BX.  Cetak elemen array variabel heksa ke BX. Heksa [BX]=heksa [B]=’B’. 14.2 Operasi Penambahan Operasi penambahan pada assembly tidak memerlukan register khusus. Semua general purpose register boleh digunakan secara bebas. Format penulisan perintah penambahan adalah : ADD Operand1, Operand2 ADC Operand1, Operand2 ADD digunakan apabila bilangan yang dijumlahkan hasilnya sama atau lebih kecil ukurannya dibanding operand nya. ADC (ADD with CARRY) digunakan apabila hasil penjumlahan lebih besar dari ukuran operand nya dengan Operand1 dapat berupa register atau alamat memori. Operand2 dapat berupa register, alamat memori atau angka. Hasil penjumlahan disimpan di operand1. Contoh program penggunaan ADD dapat dilihat pada program #30 dibawah ini. ; Program #30 .MODEL SMALL ORG 100h
  • 135. Indra Gunawan, ST., M.Kom., CEH., CHFI 133 .CODE MOV AL,5H MOV DL,4H ADD AL,DL ADD AL,02H MOV AL,angka1 MOV BL,angka2 ADD BL,AL .DATA angka1 DB 123d angka2 DB 54H
  • 136. Pemrograman Assembly Mikroprosesor 8086 134 Gambar 62 Diagram alir program #30 (ADD) Penjelasan : Perintah ADD menyimpan hasil penjumlahan pada operand kiri. Operand kanan dapat berupa register, memori maupun angka.
  • 137. Indra Gunawan, ST., M.Kom., CEH., CHFI 135 14.3 Operasi Pengurangan Operasi pengurangan juga dapat menggunakan general purpose register secara bebas. Format penulisan perintahnya adalah : SUB Operand1, Operand2 SBB Operand1, Operand2 SUB digunakan apabila bilangan yang dikurangkan hasilnya sama atau lebih kecil ukurannya dibanding operand nya. SBB (SUBSTRACT with CARRY) digunakan apabila hasil pengurangan lebih besar dari ukuran operand nya. dengan Operand1 dapat berupa register atau alamat memori. Operand2 dapat berupa register, alamat memori atau angka. Hasil penjumlahan disimpan di operand1. Contoh program penggunaan SUB dapat dilihat pada program #31 dibawah ini.
  • 138. Pemrograman Assembly Mikroprosesor 8086 136 Gambar 63 Diagram alir program #31 (SUB). Penjelasan : Perintah SUB menyimpan hasil pengurangan pada operand kiri. Operand kanan dapat berupa register, memori maupun angka.
  • 139. Indra Gunawan, ST., M.Kom., CEH., CHFI 137 14.4 Operasi Perkalian Operasi perkalian memiliki beberapa format penggunaan register dan hasilnya secara khusus. Operasi perkalian menggunakan perintah MUL, perintah ini hanya memerlukan satu operand saja. Format penulisan perintahnya adalah sebagai berikut. MUL Operand2 Operasi MUL memiliki aturan sebagai berikut :  MUL Operand2=Operand1 x Operand2  Register AX adalah operand1. Isilah register AX dengan angka yang ingin dikalikan.  Isilah Operand2 dengan angka yang ingin dikalikan.  Operand2 dapat berupa register, memori maupun angka. Contoh penggunaan perintah MUL dapat dilihat pada program #32 dibawah ini. ; Program #32 .MODEL SMALL ORG 100h .CODE MOV AL,05H MOV DL,02H MUL DL MOV AL,angka1 MOV CL,angka2 MUL CL .DATA angka1 DB 123d angka2 DB 54H
  • 140. Pemrograman Assembly Mikroprosesor 8086 138 Gambar 64 Diagram alir program #32 (MUL). Penjelasan : Register AX menampung hasil perkalian, jika tidak cukup, akan digunakan AX dan DX. 14.5 Operasi Pembagian Operasi pembagian memiliki beberapa format penggunaan register dan hasilnya secara khusus. Operasi pembagian menggunakan perintah DIV, perintah ini hanya memerlukan satu operand saja. Format penulisan perintahnya adalah sebagai berikut. DIV Operand2
  • 141. Indra Gunawan, ST., M.Kom., CEH., CHFI 139 Operasi DIV memiliki aturan sebagai berikut :  DIV Operand2=Operand1 / Operand2  Register AX adalah operand1. Isilah register AX dengan angka yang ingin dibagi.  Isilah Operand2 dengan angka yang ingin dibagi.  Operand2 dapat berupa register, memori maupun angka. Contoh penggunaan perintah DIV dapat dilihat pada program #33 dibawah ini. ; Program #33 .MODEL SMALL ORG 100h .CODE MOV AL,06H MOV DL,02H DIV DL MOV AL,angka1 MOV CL,angka2 DIV CL .DATA angka1 DB 99d angka2 DB 3H
  • 142. Pemrograman Assembly Mikroprosesor 8086 140 MULAI MOV AL,06H MOV DL,02H DIV DL = AL / DL AL=03H MOV AL,angka1 MOV CL,angka2 Variabel angka1 = 99d Variabel angka1 = 3H DIV CL = AL / CL AX=21H SELESAI Gambar 65 Diagram alir program #33 (DIV). Penjelasan : Register AX menampung hasil pembagian, jika tidak cukup, akan digunakan AX dan DX.
  • 143. Indra Gunawan, ST., M.Kom., CEH., CHFI 141 Bagian 15 Operasi File Operasi file dalam bahasa assembly melibatkan interrupt 21H. Service yang dipakai adalah AH=3Fh untuk membaca file, AH=41H untuk menghapus file, AH=40H untuk menulis file, AH=3EH untuk menutup file. Beberapa variabel yang harus dibuat untuk menggunakan interrupt ini yaitu :  Variabel untuk menampung nama file.  Variabel untuk menampung isi file.  Variabel untuk menampung text yang akan diinputkan. Pada emulator emu8086 dengan konfigurasi default maka file akan terbuat pada direktori : ‘C:emu8086MyBuild’ Atribut file ada 5, atribut ini berupa angka heksadesimal yang harus diisikan ke register CX. Mode-mode itu adalah sebagai berikut.  0H : Read only.  01H : Hidden.  02H : File system.  03H : Volume label.  04H :Nama Subdirektori.  05H : File archive. Program untuk membuat file dapat dilihat pada program #34 dibawah ini. Buat MACRO namafile, atribut, tampungan PUSH CX PUSH DX MOV AH,3Ch
  • 144. Pemrograman Assembly Mikroprosesor 8086 142 MOV CX,atribut LEA DX,namafile INT 21h MOV tampungan,AX POP DX POP CX ENDM ;Program #34 .MODEL SMALL ORG 100H .CODE Buat namafile,0h,tampungan INT 20H .DATA namafile db "file.txt", 0 tampungan dw ? text DB 'Uji coba'
  • 145. Indra Gunawan, ST., M.Kom., CEH., CHFI 143 Ga mbar 66 Diagram alir program #34 (Buat file) Penjelasan :  Variabel namafile untuk menampung nama file yang diakhiri karakter 0.