modul praktikum organisasi komputer
TRANSCRIPT
Bab I : Bahasa Pemrograman Komputer
BAB I
BAHASA PEMROGRAMAN KOMPUTER
1.1. Tingkatan Bahasa Pemrograman
Pemrograman komputer dapat dibedakan menjadi beberapa tingkat
berdasarkan kedekatan dengan hardware komputer yang ada. Ada dua level bahasa
yang dikenal , yaitu :
1. Bahasa Level rendah (low level language)
Pada awal komputer dirancang orang, hanya perancangnya yang dapat
memprogram komputer tersebut dengan bahasa yang paling rendah levelnya
(low level language) yang sering disebut sebagai bahasa mesin. Level ini sering
disebut sebagai level rendah karena instruksi dalam bahasa mesin sesungguhnya
adalah intruksi dalam deretan bit 0 dan 1 sebagai fungsi sebenarnya dari cara
kerja komputer. Tentu saja akan menjadi sangat sulit bagi orang karena antara
instruksi dan data semua berbentuk deretan bit 0 dan 1.
2. Bahasa Level Tinggi (high level language)
Pada perkembangan selanjutnya mulai diciptakan perangkat lunak yang
memungkinkan orang lain melakukan pemrograman atas komputer. Bahasa
tersebut sering disebut sebagia bahasa aras tinggi (high level language). Pada
aras tinggi ini orientasi program adalah pada persoalan yang dihadapi (problem
oriented), sedangkan pada bahasa level rendah orientasinya adalah pada mesin
komputer (machne oriented). Program aras tinggi ini menerjemahkan instruksi
bahasa menjadi bahasa mesin yang selanjutnya akan dikerjakan oleh komputer.
Ada cukup banyak pogram komputer jenis ini, misalnya :BASIC, PASCAL,
COBOL,FORTRAN, PLI, C dan lain-lain. Program penerjemahan ke dalam
bahasa mesin dapat ditempuh dengan dua cara yang dikenal dengan interpreter
dan compiler.
Interpreter
Pada cara ini penerjemahan dilakukan setiap baris intruksi diterjemahkan
dan langsung dieksekusi . Dengan demikian seandainya jumlah baris program
adalah 100 baris dan kesalahan program terjadi pada baris ke 100, maka 99 baris
Praktikum Pengantar Organisasi Komputer – pww
1
Bab I : Bahasa Pemrograman Komputer
sebelumnya akan dieksekusi oleh komputer. Model penerjemahan interpreter
misalnya pada bahasa BASIC versi lama. Kelemahan interpreter adalah pada
setiap kali program akan dijalankan maka interpreter selalu dilakukan sehingga
kode program menjadi sangat tergantung pada interpreter tersebut. Apabila
program ini program aplikasi maka jika program akan didistribusikan maka
harus didistribusikan bersama interpreternya.
Compiler :
Pada compiler program mula-mula di compile menghasikan object code.
Pada tahap berikutnya dilakukan lingking dengan linker menghasilkan program
mesin dalam bentuk COM atau EXE. Skema proses kompilasi dapat digambarkan
seperti gambar 1.1.
Compiler linker
compiler
Gambar 1.1. Kompilasi dari bahasa level tinggi
Assembler :
Sebuah bahasa yang terletak diantara bahasa level rendah dan bahasa level
tinggi adalah bahasa assembly. Bahasa assembly sebenarnya adalah bahasa mesin
yang dikodekan dalam bentuk-bentuk simbolik yang sudah memiliki makna mirip
bahasa level tinggi. Bentuk simbolik dari bahasa mesin disebut sebagai
MNEMONIC. Sebagai contoh perintah untuk mengisi register AH dengan nilai 2.
Kode mesinnya adalah :
1011 1000 0000 0010 yang dalam bilangan heksa ditulis sebagai : B4 02
Kode ini adalah kode mesin yang dalam mnemonic assembly adalah : MOV AH,02,
atau mengisi register AH dengan 2.
Praktikum Pengantar Organisasi Komputer – pww
2
Source (BASIC) :Nama.BAS
Object codeNama.OBJ
Kode mesinNama.COM
Source (PASCAL) :Nama.PAS
Bab I : Bahasa Pemrograman Komputer
Perintah assembly merupakan singkatan dari bahasa inggris dengan kode
lebih ringkas dari bahasa tingkat tinggi, misalnya MOV untuk move, MUL untuk
multiply DIV untuk division INC untuk INCREMENT dan seterusnya.
Kelebihan dan Kelemahan Assembly
Apabila dibandingkan dengan bahasa tingkat tinggi bahasa assembly
memiliki kelebihan antara lain :
- Lebih singkat, ukuran program umumnya lebih kecil.
- Eksekusi program lebih cepat.
Kelebihan ini dikarenakan dari code program assembly menjadi bahasa mesin proses
kompilasi adalah langsung. Bahkan pada program semacam DEBUG dimungkinkan
langsung dihasilkan program dalam kode mesin. Skema kompilasi jika membuat
program kode dengan perangkat lunak assembler dapat digambarkan sebagai
gambar 1.2.
Assembler
Gambar 1.2. Kompilasi assembley
Bahasa assembly juga memiliki kelemahan (lebih tepat dianggap sebagai
kesulitan bagi pemrogram), yaitu bahwa pemrogram harus mengendalikan sendiri
perintah-perintah dasar sehingga ia harus menulis kode lebih banyak dari kode
dalam bahasa level tinggi. Sebuah instruksi satu baris dalam bahasa level tinggi
umumnya harus diwakili oleh bebebrapa baris instruksi dalam bahasa assembly.
Sebagai contoh misalkan perintah basic berikut :
BASIC ASSEMBLY MESIN
Gambar 1.3. Perbandingan BASIC,ASSMBLY, MESIN
Praktikum Pengantar Organisasi Komputer – pww
3
Code:Assembley
Kode mesinNama.COM
MOV AX,TCWDIDIV LADD AX,SMOV S,AX
0000:A100020003:990004:F73E00040008:03030000000C:A30000
LET S=T/L + S
Bab I : Bahasa Pemrograman Komputer
1.2. Sistem Bilangan Hexa Desimal
Karena bahasa assembly sebenarnya adalah kode tertentu dari bahasa mesin.
Sedangkan bahasa mesin sebenarnya adalah kode bahasa dalam bentuk bilangan
biner. Kesulitan menggunakan bilangan biner untuk kode disebabkan symbol
terbatas 0 dan 1 diatasi dengan mengkodekan ulang bilangan biner tersebut menjadi
bilangan Heksa Desimal, yaitu system bilangan dengan bilangan pokok 16. Sistem
bilangan ini teramat penting dalam pemrograman assembly karena konversi ke
system bilangan biner dapat dilakukan langsung tanpa perantaraan system desimal.
Hal ini dimungkinkan karena satu digit heksa tepat diwakili oleh 4 digit biner.
Berikut ini adalah konversi dari system bilangan desimal, biner dan heksa
desimal.
DES Biner HEX DES BINER HEX0 0000 0 8 1000 81 0001 1 9 1001 92 0010 2 10 1010 A3 0011 3 11 1011 B4 0100 4 12 1100 C5 0101 5 13 1101 D6 0110 6 14 1110 E7 0111 7 15 1111 F
Andaikan dimiliki suatu kode assembly INT 20, yang memiliki kode mesin CD 20,
maka instruksi fisik sebenarnya adalah kode biner dari nilai heksa CD 20 , yaitu :
1100 1101 0010 0000
C D 2 0
Konversi BILANGAN :
Sistem Heksa Ke Desimal
- Bilanga Heksa 12A8 H berapa dalam desimal ?
1 2 4 8 H
Praktikum Pengantar Organisasi Komputer – pww
4
Bab II : Register dan Pola Pengalamatan
BAB II
REGISTER DAN POLA PENGALAMATAN
2.1. Struktur Sistem Komputer baku
Sistem komputer adalah sebuah system yang terdiri dari perangkat prosesor
untuk memproses data, perangkat memory untuk menyimpan data yang akan
diproses atau data hasil proses dan perangkat masukan untuk memasukkan data ke
system komputer dan perangkat keluaran untuk mengirim data dari system komputer
ke luar system. Secara garis besar system komputer dapat digambarkan dalam
gambar 2.1.
Gambar 2.1. Sistem komputer
2.2. Modul utama dalam Micro prosesor
Dalam system komputer micro prosesor merupakan komponen inti system.
Mikroprosesor memiliki sub komponen yang lebih rinci yang terdiri dari tiga
komponen, yaitu : control unit , Aritmetic and Logic Unit (ALU) dan register.
Gambar 2.2. merupakan skema dari micro prosesor dengan 3 sub system.
Gambar 2.2. Tiga subsitem microprosesor
Praktikum Pengantar Organisasi Komputer – pww
5
ControlUnit
ALU
Kelompok Register
Bab II : Register dan Pola Pengalamatan
Control unit : bagian microprosesor yang mengendalikan jalannya setiap operasi
microprosesor
ALU : Aritmetik Logic Unit , adalah bagian microprosesor yang bertanggung jawab
menyelenggarakan operasi aritmetik (penambahan, pengurangan
perkalian dan pembagian) dan operasi logik (perbandingan data : =,
<>, <, >)
Register : kumpulan memory kecil dalam microprosesor yang berfungsi sebagai
penampung data, instruksi yang akan diolah, diambil dari memory
atau akan disimpan dimemory.
Gambar 2.3. Micro Prosesor Intel 8088
Praktikum Pengantar Organisasi Komputer – pww
6
ES (Extra segment)
CS (Code segment)
DS (Data segment)
SS (Stack segment)
Memoryinterface
4
3
2
1
IP (Instruction Pointer) Execution Unit Control System
Antrian arus byteinstruksi
AH AL
AH AL
AH AL
AH AL
DI(Destion index)
SI( Source Index)
BP(Base Pointer)
SP(Stack Pointer)
8 bit 8 bit
16 bit
Bab II : Register dan Pola Pengalamatan
Program komputer pada hakekatnya adalah proses yang terus menerus dari
menjalankan sederetan instruksi yang selalu melibatkan register, memori. Eksekusi
dari sederatan instruksi tersebut dikendalikan dari control unit. Register dapat
berfungsi untuk transit data sementara yang akan diolah, transit data hasil olahan
atau untuk memberi status operasi daris system komputer. Kemampuan system
komputer mengolah data sangat ditentukan oleh kemampuan register untuk
menyimpan data. Perkembangan system komputer telah melewat beberapa tahap,
dari system komputer 4 bit, 8 bit, 16 bit , 32 bit dan 64 bit. Sebagai gambaran untuk
komputer 16 bit. Suatu informasi data satu karakter diwakili oleh 1 byte=8bit
sehingga register sekaligus dapat menyimpan 2 karakter dalam sekali olahan.
2.3. Sistem Micro Prosesor Intel 8088
Dalam perkuliahan ini system micro prosesor yang dijadikan standar adalah
Intel 8088, yaitu micro prosesor 16 bit buatan intel. Micro prosesor ini memiliki
ukuran register 16 bit dan jalur alamat 20 bit. Skema micro prosesor dan daftar
register yang ada dalam INTEL 8088 dapat dilihat pada gambar 2.3.
Dalam mikro prosesor tersebut yang dominan adalah register. Ada 13
register yang ada untuk mendukung system mikro prosesor. Register tersebut
dikelompokkan berdasarkan fungsinya. Dalam MP 8088 dikenal 5 kelompok
register
1. General purpose register (register serba guna)
AX ( AH + AL) : Accumulator register
BX (BH + BL) : Base register
CX (CH + CL) : Counter register
DX (DH + DL) : Data register
Register serbaguna dapat diases dengan 16 bit, atau dengan 8 bit
2. Segment register (untuk pengalamatan)
CS : Code Segment (alamat code program )
DS : Data Segment (alamat data)
SS : Stack Segment (alamat stcak)
ES : Extra Segment
Praktikum Pengantar Organisasi Komputer – pww
7
Bab II : Register dan Pola Pengalamatan
Register segment hanya dapat diases dengan model 16 bit. Register ini tidak
dapat diisi langsung oleh programmer, tetapi dapat diisi dengan cara mengcopy
dari register general purpose. Register ini berisi data alamat segment dari suatu
sel memory dengan alamat offset berasal dari register Pointer atau register Index,
misalnya pasangan alamat adalah :
SS:SP
ES:DI
DS:SI
Mengenai pengalamatan dengan dua register akan dibahas pada bab selanjutnya.
3. Pointer register (untuk pengalamatan)
IP : Instruction Pointer (menyimpan alamat instruksi yang akan dieksekusi)
SP:Stack Pointer (dengan SS mengalamati Stack memory)
BP :Base Pointer
Dalam kelompok register ini, Instruction Pointer (IP) tidak dapat diases oleh
programer karena register ini berisi alamat kode program yang akan dieksekusi.
4. Index register (untuk pengalamatan)
SI : Source Index (dengan DS mengalamati sumber data)
DI :Destination Index (dengan ES mengalamati tujuan data)
5. Flag register : Untuk mengetahui status operasi MP
FLAG register yang berupa data 16 bit masing-masing bitnya menandai suatu
status operasi. Berikut ini adalah bit-bit penanda tersebut:
BIT ke 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FLAG
Bit –bit yang bertanda xx aalah posisi bit yang tidak dipakai sebagai penanda.
Tanda berkaitan dengan kerja micro prosesor :
OF : Over flow Flag, akan bernilai 1 jika terjadi overflow dalam operasi data
DF : Direction Flag, akan bernilai 1 jika arah alamat naik dan 0 jika turun
Praktikum Pengantar Organisasi Komputer – pww
8
xx xx xx xx OF DF IF TF SF ZF xx AF xx PF xx CF
Bab II : Register dan Pola Pengalamatan
IF : Interrupt Flag
TF : Trap Flag
Tanda berkaitan dengan operasi aritmatika oleh micro prosesor :
SF : Sign flow Flag, bit berisi 1 berarti :hasil operasi bernilai negatif
ZF : Zero Flag, bit berinilai 1 berarti hasil operasi nol
AF : Auxilary Carry Flag
PF : Parity Flag
CF : Carry Flag, bit berisi 1 berarti terjadi carry dalam operasi
2.4. Beberapa istilah untuk satuan data
Dalam konteks bahasa assembly kita lebih sering berurusan dengan data
dalam bentuknya yang paling dasar, yaitu kumpulan bit. Beberapa istilah yang
berkaitan dengan satuan data dikenal :
1 bit : singkatan dari binary digit , satuan informasi yang paling kecil, dapat
bernilai 0 atau 1 yang secara fisik diwakili oleh ada tegangan listrik dan
tidak ada tegangan listrik.
1 byte : kumpulan 8 bit
1 word : 2 byte = 16 bit
1 double word : 4 byte = 32 bit
1 KB :Kilo Byte = 210 byte =1024 byte
1 MB :Mega Byte= 210KB = 210x210 =220 byte = 1.048.576 byte
1 GB :Giga Byte = 210MB = 210x210 KB=210x210x210 =230 byte
1 TB :Tera Byte = 210GB = 240 byte
Baik data ataupun code program sebenarnya dalam memory atau micro
prosesor tersimpan dalam bentuk fisik bit, yang diwakili bilangan biner 0,1. Untuk
memudahkan komunikasi, disebabkan karena deretan bit yang panjang cenderung
sulit terbaca maka pada pembahasan tentang data deretan bit lebih mudah diwakili
oleh bilangan heksa desimal atau desimal.
Praktikum Pengantar Organisasi Komputer – pww
9
Bab II : Register dan Pola Pengalamatan
2.5. Sistem Pengalamatan Memory
Memory dalam 8088 mampu menampung data 1 MB = 1024 KB = 1048576 byte
Dengan alamat memory (Hexa Desimal ) : 00000 s/d FFFFF
Addres ruang memory addres biner
00000 1 byte 0000 0000 0000 0000 000000001 1 byte 0000 0000 0000 0000 000100002 1 byte 0000 0000 0000 0000 0010…. …. … FFFFF 1 byte 1111 1111 1111 1111 1111
Untuk mengalamati memory 1 MB diperlukan register 20 bit, padahal yang ada
adalah register 16 bit. Maka digunakan metode SEGMENT:OFFSET
Dengan kalkulasi, misal alamat fisik : 12A45 dapat dialamati dengan komposisi :
Segment : 1192
Offset : 1125
Sehingga biasa ditulis sebagai alamat 1192 :1125
Contoh lain untuk alamat fisik : AB81D dapat dialamati dengan komposisi :
Segment : A870
Offset : 311D
Sehingga biasa ditulis sebagai alamat A870:311D
Berikut ni adalah peta memori untuk IBM PC 8088
00000-0007F Bios interut vector
00080-003FF Dos Interupt vector
00400-004FF BIOS data area
00500-005FF DOS dan BASIC data area
00600-9CFFF RAM Working space
A0000-A3FFF Cadangan
Praktikum Pengantar Organisasi Komputer – pww
10
SEGMENT OFFSET:
640 KB
Bab II : Register dan Pola Pengalamatan
---------------------------------------------------
A4000-AFFF Monochrome adapter
B0000-B1000
B1001-B7FFF Color/graphics adaptor
B800-BFFF
---------------------------------------------------
C0000-C7FFF Ekspansi memori
C8000-F3FFF Hard disk
CC000-F3FFF Cadangan
F4000-F5FFF User ROM (8K)
F6000-FDFFF ROM BASIC (32K)
FE000-FFFFF ROM BIOS (8K)
Praktikum Pengantar Organisasi Komputer – pww
11
Video Buffer
Bab IIIi: Instruksi Assembly
BAB III
INSTRUKSI ASSEMBLY
3.1. Jenis-jenis instruksi assembly
Instruksi assembly dikelompokkan menjadi 6 kelompok :
1. Instruksi transfer data
MOV : instruksi pemindahan data (lebih tepat pengkopian data, dari register
ke register, register ke memori, memori ke momeri dan data ke
register atau memori).
Sintaks : MOV dest,source
dengan dest = tujuan dapat berupa register atau alamat
source = asal data
Contoh : MOV AH,02 ; mengisi register AH dengan data 02
MOV DX,AX ; mengcopy register AX ke DX
PUSH : instruksi mengamankan isi register ke STACK
Sintaks : PUSH namareg
Contoh : PUSH AX ; isi AX diamankan ke stack
PUSH CX ; isi AX diamankan ke stack
POP :instruksi untuk mengambil data dari stack
Sintaks : POP namareg
Contoh : POP AX ; isi stack teratas diambil ke dalam AX
POP CX ; isi stack teratas diambil ke dalam CX
XCHG :instruksi menukarkan data antar register reg1 dengan register
reg2
Sintaks : XCHG reg1, reg2
Contoh : XCHG AH, DL ; isi AH ditukarkan dengan isi DL
XCHG DH,BL ; isi DH ditukarkan dengan isi BL
LEA :instruksi mengambil data offset alamat untuk ditampung diregister
Sintaks : LEA reg , label
Contoh : LEA DX, data1 ; alamat data disimpan di DX
data1 adalah nama label untuk data
XCHG DH,BL ; isi DH ditukarkan dengan isi BL
Praktikum Pengantar Organisasi Komputer – pww
12
Bab IIIi: Instruksi Assembly
2. Instruksi aritmetika
Instruksi ini menangani operasi aritmetika penjumlahan (ADD),
pengurangan (SUB), perkalian (MUL) dan pembagian (DIV). Instruksi ini
akan dibahas tersendiri dibagian belakang.
3. Instruksi manipulasi bit
Instruksi manipulasi bit terdiri dari instruksi logika, geser bit dan gulung bit.
Instruksi logika : AND, OR, XOR dan NOT
AND : instruksi untuk meng-AND-kan dua buah data dan hasil operasi
AND akan ditaruh dalam operand yang pertama
Sintaks : AND dest, source
Contoh :MOV AX, 1234H
AND AX,0012H ; isi AX di-AND-kan dengan 1122H
Proses operasi AND akan dilakukan per-bit. Dengan demikian setiap
isi register atau data dikonversi dulu ke nilai biner dan di AND kan
per bit.
AX 1234 H 0001 0010 0011 0100
0012 H 0000 0000 0001 0010
----------------------------------- AND
0000 0000 0001 0000
0 0 1 0 (HEKSA)
Hasil operasi AND AX,0012H akan menyebabkan AX yang semula
berisi data 1234H berubah menjadi : 0010H
OR : instruksi untuk meng-OR-kan dua buah data dan hasil operasi OR
akan ditaruh dalam operand yang pertama
Sintaks : OR dest, source
Contoh :MOV AX, 1234H
OR AX,0012H ; isi AX di-OR-kan dengan 1122H
Proses operasi OR akan dilakukan per-bit. Dengan demikian setiap isi
register atau data dikonversi dulu ke nilai biner dan di OR kan per bit.
Praktikum Pengantar Organisasi Komputer – pww
13
Bab IIIi: Instruksi Assembly
AX 1234 H 0001 0010 0011 0100
0012 H 0000 0000 0001 0010
----------------------------------- OR
0001 0010 0011 0110
1 2 3 6 (HEKSA)
Hasil operasi OR AX,0012H akan menyebabkan AX yang semula
berisi data 1234H berubah menjadi : 1236H
XOR : instruksi eXclusive-OR- dari dua buah data dan hasil operasi
XOR akan ditaruh dalam operand yang pertama
Sintaks : XOR dest, source
Contoh :MOV AX, 1234H
OR AX, 1100H ; isi AX di-OR-kan dengan 1100H
Proses operasi XOR akan dilakukan per-bit.
AX 1234 H 0001 0010 0011 0100
1100 H 0001 0001 0000 0000
----------------------------------- XOR
0000 0011 0011 0100
0 3 3 4 (HEKSA)
Hasil operasi XOR AX,1100H akan menyebabkan AX yang semula
berisi data 1234H berubah menjadi : 0334 H
Operator XOR sering digunakan untuk mengosongkan isi register,
karena operasi ini akan menghasilkan 0 bial operand nya sama,
sehingga jika register di XORkan dengan register itu sendiri maka isi
register akan berubah menjadi 0, contoh :
XOR AH, AH ; AH akan menjadi 00H
XOR CX,CX ; CX akan menjadi 0000H
NOT : instruksi untuk menukar tiap bit : 0 menjadi 1 dan sebaliknya
Sintaks : NOT reg
Contoh :MOV AH, 12H
NOT AH
Hasil operasi : AH menjadi EDH, ini dapat dilacak dari :
Praktikum Pengantar Organisasi Komputer – pww
14
Bab IIIi: Instruksi Assembly
AH=12H 0001 0010
NOT AH 1110 1101
E D (HEKSA)
SHL : artinya Shift Left ; untuk menggeser isi register sejumlah bit ke KIRI
Sintaks : SHL reg, n
Contoh :MOV AX, 1234H
SHL AX,1 ; isi AX di-geser kiri-kan satu bit
“Bit yang paling kanan diganti dengan NOL”
Setelah SHL AX,1 maka AX akan menjadi : 2468H
AX 1234 H 0001 0010 0011 0100
Jika digeser ke kiri satu bit manjadi : 0010 0100 0110 1000
Ini sama dengan nilai heksa : 2468H.
SHR : artinya Shift Right ; untuk menggeser isi register sejumlah bit ke
KANAN
Sintaks : SHR reg, n
Contoh :MOV AX, 1234H
SHR AX,1 ; isi AX di-geser kiri-kan satu bit
“Bit yang paling kiri diganti dengan NOL”
Setelah SHR AX,1 maka AX akan menjadi : 091AH
AX 1234 H 0001 0010 0011 0100
Geser kanan 1 bit 0000 1001 0001 1010
0 9 1 A (HEKSA)
ROL : artinya Rotate Left ; untuk menggulung bit ke KIRI
Sintaks : ROL reg, n
Contoh :MOV AX, A234H
ROL AX,1 ; isi AX di-gulung ke kiri
“Bit yang paling kiri menjadi bit paling kanan ”
Setelah ROL AX,1 maka AX akan menjadi : 4469H
AX 1234 H 1010 0010 0011 0100
Gulung kiri 1 bit 0100 0100 0110 1001
Praktikum Pengantar Organisasi Komputer – pww
15
Bab IIIi: Instruksi Assembly
4 4 6 9 (HEKSA)
ROR : artinya Rotate Right ; untuk menggulung bit ke KANAN
Sintaks : ROR reg, n
Contoh :MOV AX, A235H
ROL AX,1 ; isi AX di-gulung ke kiri
“Bit yang paling kanan menjadi bit paling kiri ”
Setelah ROL AX,1 maka AX akan menjadi : D11AH
AX 1234 H 1010 0010 0011 0101
Gulung kanan 1 bit 1101 0001 0001 1010
D 1 1 A (HEKSA)
4. Instruksi pemindahan kendali
Instruksi pemindahan kendali rogram dapat berupa instruksi lompatan
(JUMP) atau instruksi putaran (LOOP)
JMP : instruksi kendali program melompat ke nomor tertentu
Sintaks : JMP n dengan n nomor offset
JMP label dengan label adalah nama label dalam assembly
Contoh :JMP 0107 ; kendali program melompat ke offset 0107
Instruksi lompatan dapat didahului oleh suatu perbandingan. Dari
hasil perbandingan lomptan akan ditentukan. Perbandingan akan
dilakukan antara register dengan data atau register/alamat/ data lain.
Contoh :
CMP BX,0000H
JE lagi
Program akan melompat ke lagi jika BX berisi 0000H
Lompatan bersyarat antara lain :
JE = JUMP IF EQUAL
JNE = JUMP IF NOT EQUAL
JZ =JUMP IF ZERO
JNZ =JUMP IF NOT ZERO
JG =JUMP IF GREATER THAN
Praktikum Pengantar Organisasi Komputer – pww
16
Bab IIIi: Instruksi Assembly
JLE =JUMP IF LESS THAN OR EQUAL TO
LOOP : instruksi kendali program berputar ke nomor/label tertentu
Sintaks : LOOP n dengan n nomor offset
LOOP label dengan label adalah nama label dalam
assembly
Contoh :LOOP 0107 ;
program akan berputar ke offset 0107 jika nilai CX tidak 0,
setiap kali berputar nilai X akan dikurangi 1 otomatis. Bila nilai CX
sudah mencapai 0 maka putaran dihentikan.
LOOP juga dapat digabungkan dengan CMP sehingga putaran dapat
disyarat oleh suatu kondisi. Setelah operasi CMP maka loop dapat
berupa :
LOOPE =berputar jika sama
LOOPNE =berputar jika tidak sama
5. Instruksi string
Operasi string merupakan bagian yang disediakan sendiri instruksinya.
Operasi string menyangkut pemindahan string, perbandingan string.
Pemindahan (lebih tepat disebut pengcopyan) dapat antar memori atau antar
register. Instruksi ini antara lain :
MOVSB, MOVSW
CMPSB,CMPSW
LODSB,LODSW
STOSB,STOSW
Uraian dari instruksi ini akan dibahasa tersendiri pada bab selanjutnya.
6. Instruksi INTERUPT
Interupt merupakan sebuah prosedur terprogram mesin yang siap
dipanggil untuk dieksekusi. Interupt ini berkaitan dengan fungsi dasar
operasi komputer, misalnya menulis karakter, menset kursor, mambaca
karakter dan lain-lain.
Praktikum Pengantar Organisasi Komputer – pww
17
Bab IIIi: Instruksi Assembly
Interupt dipanggil dngan menuliskan nomor interuptnya, misalnya :
INT 10H ; berarti memanggil interrupt nomor 10H
INTERUPT BIOS
Interupt BIOS adalah interrupt dengan nomor interrupt 00H sampai
19H
Beberapa diantaranya adalah :
INT 00H : divide by zero, dipanggil jika terjadi kesalahan pembagian
dengan 0
INT 01H : single step
INT 05H : print screen, jika dipanggil maka isi layar akan dicetak
keprinter
INT 09H : operasi keyboard
INT 10H : operasi layar
INT 13H : operasi print screen, jika dipanggil maka isi layar akan
dicetak keprinter
INTERUPT DOS
Jika interrupt BIOS dirancang oleh perancang mikro prosesor maka
interrupt DOS merupakan interrupt yang dikembangkan oleh system operasi
DOS. Interupt DOS memiliki nomor interrupt 20H ke atas
Contoh : INT 21H untuk layanan layar , keyboard dan disk
3.2. Layanan Interupt
Telah disinggung didepan bahwa interrupt dipanggil dengan nomor interrupt.
Untuk suatu operasi seperti operasi layar misalnya, kebutuhan operasi layar
dapat bermacam-macam, misalnya : menulis karakter, mengatur kursor,
menggulung layar dan lain-lain. Interupt yang memiliki pelayanan
bermacam-macam pelayannya ditentukan oleh NOMOR SERVIS. Dengan
demikian interrupt dapat memiliki nomor servis atau tidak.
Interupt tanpa nomor servis :
Interupt tanpa nomor servis misalnya :
INT 00H ; untuk divide by zero
Praktikum Pengantar Organisasi Komputer – pww
18
Bab IIIi: Instruksi Assembly
INT 05H ; untuk print screen
INT 20H ; untuk mengakhiri program
Interupt dengan nomor servis:
Interrupt dengan nomor servis misalnya:
INT 10H ; layanan layar BIOS
INT 13H ; layanan Disk BIOS
INT 21H. ; layanan layar, disk, keyboard dengan DOS
Interupt dengan nomor servis apabila akan dipanggil, maka nomor servis
harus ditentukan terlebih dahulu dengan cara :MENGISI REGISTER AH
DENGAN NOMOR SERVIS TERSEBUT.
Contoh : INT 21H servis 02
Interupt ini berguna untuk mencetak karakter ke layar
Syarat sebelum dipanggil :
-Register AH diisi 02 (nomor servis)
-Register DL diisi kode ASCII karakter yang akan dicetak.
Program untuk mencetak huruf ‘A’, dengan kode ASCII 41H adalah :
MOV AH,02MOV DL,41HINT 21HINT 20H
3.3. Program dengan Assembly
Membuat program dengan assembly adalah merangkai instruksi-instruksi
assembly yang dapat berupa mengisi register, mengisi alamat memori, dan
memanggil interrupt. Pemanggilan interrupt dan menset register merupakan
sebagian besar isi program assembly. Hal ini mengingat jika akan dilakukan
pemanggilan interrupt kebanyakan pasti didahului dengan mengisi register yang
disaratkan oleh interrupt tersebut.
Contoh : Perhatikan program BASIC berikutLOCATE 5,10PRINT “A”
Praktikum Pengantar Organisasi Komputer – pww
19
Bab IIIi: Instruksi Assembly
END
Program tersebut bertujuan memposisikan kursor pada baris 5 kolom 10,
menulis huruf A pada posisi tersebut dan mengakhiri program. Jika program BASIC
tersebut dicoba konversi ke program assembly, maka yang diakukan :
- mengatur posisi kursor : INT 10H servis 02
- cetak karakter : INT 21H servis 02
- mengakhiri program : INT 20
Terlihat bahwa semuah baris perintah basic diterjemahkan sebagai pemanggilan
interrupt oleh assembly. Hal ini menjadi alas an tersendiri bahwa program assembly
akan selalu memiliki jumlah baris yang jauh lebih banyak dari program high
level,karena setiap instruksi high level harus diterjemahkan menjadi berbaris-baris
instruksi assembly. Namun demikian jika program assembly yang sudah jadi
dibandingkan dengan program yang sejenis dari program high level ukuran program
assembly akan jauh lebih kecil.
Program assembly dari program BASIC diatas :
MOV AH,02MOV BH,00MOV DH,05MOV DL,0AHINT 10H ; atur posisi kursorMOV AH,02MOV DL,41HINT 21H ;cetak karakter AINT 20H ;program terminate
Praktikum Pengantar Organisasi Komputer – pww
20
Bab IV : Membuat Program dengan DEBUG
BAB IV
MEMBUAT PROGRAM DENGAN DEBUG
Cara paling praktis membuat program assembly adalah menggunakan
program DEBUG.COM atau DEBUG.EXE dari DOS. Dengan program ini instruksi
assembly langsung dituliskan dimemori dan dapat langsung dieksekusi atau
disimpan dalam bentuk program COM. Berikut ini adalah cara masuk ke program
DEBUG dari keadaan kendali program windows :
1) Pilih menu Start ¬ Run2) Ketik tulisan cmd pada list isian Open3) Tekan tombol button OK
Gambar 4.1. Memasuki program DOS
Setelah masuk dalam kendali DOS, masuk directori command dan ketik DEBUG
<enter>
Gambar 4.2. Memanggil program DEBUG
Praktikum Pengantar Organisasi Komputer – pww
20
Bab IV : Membuat Program dengan DEBUG
Layar debug ditandai dengan prompt – (tanda negatif ). Pada prompt ini dapat
diketikkan perintah-perintah assembly.
Perintah-perintah Debug :
Perintah An : artinya Assemble n, dengan n adalah alamat offset. Perintah ini
digunakan untuk memulai menulis program assembly pada alamat memory
(offset) n.
Contoh : A100 <mulai menulis program pada alamat 100H)
Gambar 4.3. Menulis di alamat 100H
Alamat segment 1277 hanya merupakan salah satu contoh, jika dipraktekkan
alamat segment sangat tergantung pada konfigurasi memory. Namun karena
program debug hanya memungkinkan mengetik program COM yang berarti tidak
perlu dipersoalkan mengenai alamat segmentnya.
Catatan :Perlu selalu diingat bahwa system bilangan <default> dalam DEBUG
adalah system bilangan HEKSA DESIMAL. Sehingga jika digunakan
suatu bilangan tanpa akhiran H berarti sudah merupakan bilanganHeksa
Desimal.
Setelah diketikan A100, maka dapat dituliskan program yang diinginkan.
Berikut ini contoh program untuk mencetak karakter ‘A’ dengan interrupt 21H
servis 02. Kode ASCII karakter ‘A’ adalah 41H.
Gambar 4.4. Program Cetak Huruf A
Praktikum Pengantar Organisasi Komputer – pww
21
Bab IV : Membuat Program dengan DEBUG
Perintah G : Artinya <Go> , perintah ini digunakan untuk mengeksekusi program
assembly. Contoh seperti gambar 2.5. Setelah program dijalankan
maka jika tidak ada kesalahan akan tertulis :”Program terminate
normally”.
Gambar 4.4. Eksekusi program cetak A
Perintah R :Artinya <register>, untuk menampilkan isi register. Register yang
ditampilkan adalah : AX,BX,CX,DX, SP,BP,SI,DI, DS,ES,SS,CS, IP
dan posisi FLAG register. Contoh pada gambar 2.5.
Gambar 4.5. Hasil Perintah R
Perintah T : artinya <Trace>, yaitu menjalankan program per instruksi satu demi
satu.
Perintah D : artinya <Dump>, yaitu menampilkan isi memori. Contoh seperti
Gambar 2.6.
Gambar 4.6. Hasil Dump
Jika diamati hasil Dump terlihat pada alamat 100 sebanyak 8 byte adalah program
cetak huruf A dalam kode mesin heksa desimal. Rincinya adalah :
Pada alamat : 0100 dan 0101 , tertulis B4 dan 02, artinya : MOV AH,02
Praktikum Pengantar Organisasi Komputer – pww
22
Bab IV : Membuat Program dengan DEBUG
Pada alamat : 0102 dan 0103 , tertulis B2 dan 41, artinya : MOV DL,41HPada alamat : 0104 dan 0105 , tertulis CD dan 21, artinya : INT 21H Pada alamat : 0106 dan 0107 , tertulis CD dan 20, artinya : INT 20H
Perintah U : Artinya <Unassmble>, yaitu menampilkan kembali program assembly
yang pernah ditulis.
Sintaknya adalah Un, dengan n adalah alamat offset yang akan ditampilkan.
Contoh : Akan ditampilkan alamat 100
Gambar 4.7. Hasil perintah U100
Pada perintah U, tampilan hasilnya berupa :
Nomor segment: nomor offset kode mesin dan menemonic.
Untu jelasnya misalnya pada baris pertama tertulis :
0514:0100 B402 MOV AH,02
Berarti pada alamat 0100 beris data B4 dan alamat 0101 berisi data 02, B402 adalah
kode mesin dari instruksi assembly (mnemonic) MOV AH,02
Perintah N : artinya <Name>, digunakan untuk memberi nama file untuk
menyimpan program.
Contoh : N COBA.COM
Perintah W :artinya <write> atau tulsi ke dalam file sebanyak “isi register CX”
byte. Digunakan untuk menyimpan program dalam bentuk file kode
mesin. Sebelumnya didahului dengan memberi nama file dengan
perintah N dan men-set isi register CX dengan ukuran program dalam
byte.
Berikut ini contoh memberi nama file dengan COBA.COM , menset register CX
dengan 8 dan melakukan perintah W( write).
Praktikum Pengantar Organisasi Komputer – pww
23
Bab IV : Membuat Program dengan DEBUG
Gambar 4.8. Simpan program cetak ‘A’ dengan COBA.COM
Program Cetak A 10 kali.
Untuk memperjelas penggunaan DEBUG, berikut ini dikembangkan
program cetak A menjadi program cetak A 10 kali. Untuk mencetak A 10
kali digunakan perintah LOOP. Dalam assembly perintah LOOP memiliki
syntax : LOOP n, dengan n adalah nama label atau nomor offset dimana
statemen yang akan diulang . Program akan berputar sebanyak “isi register
CX”. Dengan demikian apabila diinginkan LOOP akan berputar 10 kali,
maka isi register CX harus 10. Berikut ini programnya dan hasil eksekusinya
dlam debug.
Gambar 4.9. Program cetak A 10 kali
Jika diperhatikan program pada gambar 2.8. mula-mula register CX diisi
dengan 10 (tertulis 000AH). Perintah LOOP 0107 berarti perintah pada alamat 0107
akan diulang 10 kali. Pada setiap kali ulangan nilai CX akan diturunkan 1 secara
otomatis, sampai suatu saat nilai CX akan menjadi 0. Jika nilai CX 0 maka perintah
LOOP akan terhenti dengan sendirinya.
Program Cetak : ABC…. sampai Z
Program cetak A 10 kali dikembangkan lagi menjadi program cetak
ABCD..Z. Jika digunakan LOOP berarti program harus berputar 26 kali, yaitu
Praktikum Pengantar Organisasi Komputer – pww
24
Bab IV : Membuat Program dengan DEBUG
sebanyak huruf dari A sampai. Pada awal program CX diisi 26 (dalam Heksa
desimal adalah 1AH). Selanjutnya DL diisi 41 (kode ASCII karakter A), setiap
putaran nilai DL dinaikkan 1 (dengan perintah INC DL), sehingga setelah tadinya
DL berisi 41 yang tercetak A, jika DL dinaikkan 1 menjadi 42 maka yang tercetak
adalah B dan seterusnya sampai Z. Berikut ini adalah program dalam DEBUG.
Gambar 4.10. Program Cetak A…Z
Program Cetak : A*B*C*…..sampai Z*
Program mencetak huruf A sampai Z diselingi dengan cetak karakter *
diperlukan sedikit ‘trik’. Karena mencetak karakter menggunakan interrupt 21H
servis 02 berarti mencetak karakter yang kode ASCIInya tersimpan dalam DL, maka
setelah cetak ‘A’ isi DL harus di’amankan’ dulu ketempat lain (misalnya diamankan
ke DH). Setelah DL diamankan DL dapat diisi dengan kode ASCIInya karakter ‘*’,
yaitu 2AH. Setelah huruf A dicetak dan karakter * dicetak, isi DL dikembalikan lagi
dari tempat pengamannya. Isi DL dinaikkan (INC) satu dan lakukan LOOP cetak
karakter berikutnya.
Gambar 4.11. Hasil program Asampai Z
Praktikum Pengantar Organisasi Komputer – pww
25
Bab V : Stack
BAB V
STACK
Dalam pemrograman assembly sering dijumpai situasi dimana isi register
saat ini harus diamankan ketempat lain sementara register akan dipakai. Karena
jumlah register terbatas pengamanan tidak dapat selalu dilakukan terhadap register
lain. Konsep yang ditawarkan untuk mengatasi hal ini adalah pengamanan isi
register ke dalam memori. Untuk selanjutnya memori yang disediakan untuk
pengamanan register dinamakan dengan STACK.
Beberapa kriteria STACK adalah :
- Sifat operasinya LIFO (Last In First Out), artinya data yang disimpan
terakhir ke dalam stack, akan diambil yang pertama kali.
- Ada operasi PUSH, yaitu mendorong isi register ke dalam STACK
- Ada operasi POP, yaitu operasi mengambil data dari STACK ke dalam
register
- Adres memori yang menangani stack adalah SS:SP (Stack Segment dan
Stack Pointer)
Gambaran dari cara kerja stack dapat dimisalkan dengan potongan program berikut :MOV SP,1B00HMOV DX,BBCCHMOV SI,1122PUSH DXPUSH SIPOP BXPOP DI
Jika digambarkan mula-mula pointer stack adalah menunjuk alamat 1B00H
Setelah instruksi MOV SP,1B00H stack berada pada keadaan :
…. …1AFCH1AFDH1AFEH1AFFH1B00H STACK
Praktikum Pengantar Organisasi Komputer – pww
26
SP
Bab V : Stack
DX berisi BBCCH, maka setelah instruksi PUSH DX stack berada pada keadaan :
…. …1AFCH1AFDH1AFEH CC1AFFH BB1B00H STACK
SI berisi 1122H, maka setelah instruksi PUSH SI stack berada pada keadaan :
…. …1AFCH 221AFDH 111AFEH CC1AFFH BB1B00H STACK
Setelah operasi POP BX, maka register BX akan berisi data 1122H dan stack
menjadi seperti berikut :
…. …1AFCH 1AFDH 1AFEH CC1AFFH BB1B00H STACK
Setelah operasi POP DI, maka register DI akan berisi data BBCCH dan stack
menjadi kembali seperti semula :
…. …1AFCH 1AFDH 1AFEH 1AFFH1B00H STACK
Contoh Program :
Program mencetak karakter A*B*C* ….Z* yang pernah dituliskan pada bab
sebelumnya dapat ditulis ulang dengan menggunakan konsep STACK. Pada
Praktikum Pengantar Organisasi Komputer – pww
27
SP
SP
SP
SP
Bab V : Stack
program terdahulu pengamanan data dari register DL dilakukan dengan memindah
terlebih dahulu ke register DH. Hal ini dapat dilakukan mengingat dalam program
tidak menggunakan register DH. Pada persoalan lain, apabila ternyata dalam
program melibatkan register sedemikian sehingga tidak memungkinkan pengamanan
data ke dalam register, maka satu-satunya cara adalah data diamankan ke dalam
STACK. Berikut adalah modifikasi program cetak A*B*…Z* dengan pengamanan
data ke dalam stack.
Gambar 5.1. Cetak A*B*..Z* dengan bantuan STACK
Loop Dua Lapis dengan STACK
Kadang dalam suatu pemrograman diinginkan loop dua lapis. Karena dalam
assembly kendali loop menggunakan register CX, maka dalam
mengimplementasikan loop dua lapis mula-mula CX diisi counter kendali luar,
kemudian CX di PUSH dan digantikan nilainya dengan kendali dalam. Jika proses
dalam kendali dalam telah selesai nilai CX di POP dari stack dan digunakan sebagai
kendali. Sebagai contoh andaikan dimiliki program BASIC berikut :
KodeASCII=65FOR I=1 TO 10
FOR J=1 TO 5 PRINT CHR$(KodeASCII); NEXT J KodeASCII=KodeASCII+1NEXT IEND
Praktikum Pengantar Organisasi Komputer – pww
28
Bab V : Stack
Program tersebut outputnya :
AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJ
Yaitu menulis A sampai J , 10 kali (sebagai loop luar), setiap huruf ditulis 5 kali
(loop dalam 5 kali)
Jika logika program tersebut diimplementasikan dengan assembly, mula-
mula CX diset 000A (loop luar). Berikutnya set AH=02 dan DL=41H sebagai awal
loop. Selanjutnya CX diPUSH dan diisi CX dengan 0005 sebagai kendali loop
dalam. Dan proses cetak dilakukkan dan diulang 5 kali. Nilai CX kemudaian di POP
dan nilai DL dinaikkan 1. Proses kembali ke awal dengan LOOP luar.
Adapun program dan hasil eksekusinya dlam DEBUG adalah :
Gambar 5.2. Loop dua lapis
Praktikum Pengantar Organisasi Komputer – pww
29
Bab VI : Memprogram dengan Turbo Assembler
BAB VI
PEMROGRAMAN DENGAN TURBO ASSEMBLER
Pada conoth-contoh program terdahulu penulisan program terbatas pada
program DEBUG. Ada beberapa keterbatasan pada DEBUG yang hanya mampu
menuliskan program terbatas pada perintah-perintah tertentu, sedangan perintah
yang lain tidak dapat dilakukan dalam DEBUG. Perintah yang tidak dapat dilakuan
misalnya interrupt untuk mencetak string atau pembuatan label dengan non
bilangan.
6.1. Program COM dan program EXE
Pada pembuatan program dengan DEBUG hanya dapat dilakukan untuk
membuat program COM tetapi tidak dapat digunakan untuk membuat program
EXE. Jika diinginkan membuat program EXE fasilitas yang dapat digunakan adalah
membuat program dengan TURBO ASSEMBLER.
Berikut ini perbedaan antara program yang ber-ekstensi COM dan program
ber-ekstensi EXE.
Tabel 6.1. Perbedaan program COMN dan EXE
Program COM Program EXE1 Ukuran file maksimal dari 64
KB (1 segment)
Ukuran file dapat lebih dari 64 KB
2 Dapat dibuat dengan DEBUG,
TURBO ASSEMBLER
Tidak dapat dibuat dengan
program DEBUG3 CS, DS, SS dan ES menempati
segmen yang sama
CS, DS, SS dan ES dapat
menempati segmen yang berbeda4 Eksekusi lebih cepat Eksekusi lebih lambat
6.2. Memprogram dengan Turbo Assembler
Program Turbo assembler dilengkapi dengan dua perangkat, yaitu :
COMPILER dan LINKER. Pengetikan kode sumber dapat digunakan editor teks
sembarang kemudian disimpan dengan ekstensi ASM. Proses pertama lakukan
kompilasi dengan TASM.EXE yang akan menghasikan OBJECT code. Selanjutnya
dilakukan linking dengan TLINK.EXE menghasilkan program COM atau EXE.
Praktikum Pengantar Organisasi Komputer – pww
30
Bab VI : Memprogram dengan Turbo Assembler
Berikut sekema pembuatan program dengan turbo assembler :
TASM file.ASM TLINK/t file.OBJ
Gambar 6.1. Proses edit, kompilasi dan linking dengan turbo assembler
Berikut ini struktur program COM dengan perangkat lunak Turbo Assembler.
TITLE namaProgram[namaSegment] SEGMENT
ASSUME CS:[namaSegment] ORG 100H
[label_1] : JMP label_2 ;disini daerah definisi data
;……….[Label_2] :
;disini dituliskan main program ;…………………… ;……………………
MOV AX 4C00H INT 21H ; program terminate
[namaSegment] ENDS END [label_1]
Catatan Penting :
1. Dalam turbo assembler tanda TITIK KOMA menunjukkan bahwa
pernyataan setelah tanda TTIK KOMA dianggap sebagai KOMENTAR,
yang tidak akan diproses dalam kompilasi.
2. NamaSegment, label_1 dan label_2 adalah nama-nama yang dapat
ditentukan sendiri oleh programmer dengan ketentuan tidak boleh ada spasi
atau karakter khusus yang tidak dapat digunakan untuk nama label. Dapat
digunakan garis bawah untuk nama label.
Praktikum Pengantar Organisasi Komputer – pww
31
Editor teks menghasilkan :File.ASM
File.OBJ
File.COM
Bab VI : Memprogram dengan Turbo Assembler
3. Untuk mengakhiri program dapat digunakan INT 20H, atau INT 21H servis
4CH. Umumnya pada pengetikan turbo assembler digunakan yang terakhir
meskipun tidak diharuskan.
Contoh 1.
Program untuk mencetak huruf ‘A’ yang telah dibuat dengan turbo assembler
sebagai berikut. Setelah program diketik disimpan dengan ,misalnya cetak.ASM.
Selanjutnya untuk mengkompile dilakukan dengan :
C> TASM cetak.asm <enter>
Untuk melakukan link menghasilkan program COM dilakukan dengan cara :
C>TLINK/t cetak.obj <enter>
Berikut kode programnya :TITLE ProgramCetak_ACode_seg SEGMENT
ASSUME CS:Code_seg ORG 100H
Start: JMP mulai Data equ 41HMulai: MOV AH,02
MOV DL,Data INT 21H ; cetak karakter
MOV AX 4C00H INT 21H Code_seg ENDS
END start
Hal lain yang harus diperhatikan adalah mengenai system bilangan default
yang digunakan adalah system bilangan DESIMAL. Jika diinginkan bilangan
HEKSA DESIMAL maka harus eksplisit ditambahkan H diakhir bilangan. Hal ini
berbeda dengan DEBUG dimana default system bilangannya adalah HEKSA
DESIMAL.
6.3. Masalah Definisi Data
Ada beberapa definisi data yang dapat digunakan dalam turbo assembler,
antara lain :
Praktikum Pengantar Organisasi Komputer – pww
32
Bab VI : Memprogram dengan Turbo Assembler
Untuk variable :
db : artinya Define Byte , yaitu mendefinisikan data dengan satuan byte
Contoh : data db ‘JOGJA’
N db 15
AKIR db ‘$’
Hasil db ? ; data 1 byte nilainya ditentukan kemudian
dw : artinya Define Worde , yaitu mendefinisikan data dengan satuan word (2
byte)
Contoh : N dw ?
Mendefinisikan variable N ukuran 1 word nilainya ditentukan
kemudian
Untuk konstanta:
equ: artinya mendefinisikan label berisi data constants
Contoh : akir equ ‘$’
Layar equ 25*80
6.4 Masalah Penggunaan label
Label berguna untuk nama yang dapat berupa nama segmen, nama awal
program, nama tempat tujuan LOOP atau JMP, nama data, nama macro atau nama
prosedur. Berikut ini contoh program assembly menggunakan LOOP untuk
mencetak huruf A sampai Z.
Contoh 2
Program untuk mencetak huruf ‘A’..s/d ‘Z’ dibuat dengan turbo assembler. Program
berikut TIDAK MENGGUNAKAN DEFINISI DATA sehingga tidak perlu ada
lompatan pada awal program.
Praktikum Pengantar Organisasi Komputer – pww
33
Bab VI : Memprogram dengan Turbo Assembler
TITLE ProgramCetak_A_sampai_ZCode_seg SEGMENT
ASSUME CS:Code_seg ORG 100H
Start: MOV CX,001AH ; cacah ulangan
MOV AH,02MOV DL,41H
Ulang: INT 21H ; cetak karakterINC DLLOOP Ulang
MOV AX 4C00H INT 21H Code_seg ENDS
END start
Praktikum Pengantar Organisasi Komputer – pww
34
Bab VII : Output Layar
BAB VII
OUTPUT LAYAR
7.1. Interupt DOS untuk Output Layar
Interupt DOS untuk layanan layar terhimpun dalam INT 21H yang merupakan
interupt untuk layar, keyboard dan file.
Cetak Karakter :
INT 21H servis 02H
Syarat register untuk cetak karakter adalah :
AH 02H
DL kode ASCII karakter yang akan dicetak
Contoh program telah banyak dilakukan pada bab terdahulu dalam DEBUG
maupun Turbo Asembler.
Cetak String :
INT 21H servis 09H
Syarat register untuk cetak karakter adalah :
AH 09H
DX offset data string yang akan dicetak
Contoh : Program mencetak
UNIVERSITAS SEBELAS MARET
Jl. Ir. SUTAMI No. 36A
SURAKARTA
Programnya :TITLE cetakUNScode_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai data1 db 'UNIVERSITAS SEBELAS MARET’,10,13,’$' data2 db 'Jl. Ir. SUTAMI No. 36A’,10,13,’$' data3 db 'SURAKARTA$'mulai: MOV AH,09 MOV DX,OFFSET data1
Praktikum Pengantar Organisasi Komputer – pww
34
Bab VII : Output Layar
INT 21H ; tulis teks pertama MOV DX,OFFSET data2 INT 21H ; tulis teks kedua MOV DX,OFFSET data3 INT 21H ; tulis teks ketiga MOV AX,4C00H INT 21Hcode_seg ENDs END start
7.2. Layanan INT BIOS Untuk Ases Layar (INT 10H)
Untuk mengases layar seperti mengatur kursor, mencetak huruf atau string,
menghapus layar dan lain-lain tersedia interupt BIOS yaitu INT 10H dengan 16 servis
yang secara rinci seperti berikut :
INT 10H
Servis 00H :menentukan modus video
Servis 01H :set ukuran kursor
Servis 02H :menentukan posisi kursor
Servis 03H :membaca posisi kursor
Servis 04H :membaca posisi lightpen
Servis 05H :menentukan halaman layar CRT yang digunakan
Servis 06H :menggulung layar ke atas (scroll up)
Servis 07H :menggulung layar ke bawah (scroll down)
Servis 08H :Membaca data karakter dan atributnya diposisi kursor
Servis 09H :Mencatak karakter dengan atributnya
Servis 0AH :Mencetak karakter tanpa atribut
Servis 0BH :Menentukan pallete warna
Servis 0CH :Menulis titik pixel
Servis 0DH :Memabaca data diposisi titik pixel
Servis 0EH : Menulis karakter secara mesin tulis
Servis 0FH : membaca status modes video yang digunakan
Menentukan posisi kursor (INT 10H servis 02)
Syarat register :
AH 02
Praktikum Pengantar Organisasi Komputer – pww
35
Bab VII : Output Layar
BH nomor halaman layar
DH posisi baris
DL posisi kolom
Untuk layar CGA mode teks layar dipandang sebagai matriks karakter 25 baris 80
kolom dengan posisi kiri atas 0,0 dan kanan bawah 24,79
(0,0) 80 kolom
25 baris
Gambar 7.1. Koordinat layar
Pada koordinat seperti dalam gambar tersebut kita dapat meletakkan posisi
kursor.
Contoh program berikut menaruh kursor pada tengah layar (kira-kira baris 11 kolom
38) menuliskan tulisan ‘U N S’
;BIOS1.ASM;Program atur posisi kursorcode_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai data db 'U N S$'mulai: ;atur kursor MOV AH,02 MOV BH,00 MOV DH,11 MOV DL,38 INT 10H ;atur kursor
MOV AH,09 MOV DX,OFFSET data INT 21H ; tulis teks udah : MOV AX,4C00H INT 21Hcode_seg ENDs END start
Praktikum Pengantar Organisasi Komputer – pww
36
(24,79)
Bab VII : Output Layar
Apabila program tersebut dijalankan maka akan tertulis “U N S” pada tengah layar
(baris 11, kolom 38). Akan tetapi bisa jadi pada posisi tersebut saat itu sedang ada
tulisannya. Untuk menjamin tampilan yang baik ada baiknya layar dibersihkan
terlebih dahulu.
Menggulung Layar
Untuk membersihkan layar dapat digunakan salah satu interupt gulung layar, yaitu :
INT 10H servis 06H : gulung layar ke atas
INT 10H servis 07H : gulung layar ke bawah
Syarat register adalah :
AH nomor servis 06 atau 07
AL jumlah baris yang digulung (0=semua baris=bersihkan)
BH warna layar yang muncul
CH baris kiri atas
CL kolom kiri atas
DH baris kanan bawah
DL kolom kanan bawah
Jika interupt dipanggil maka wilayah jendela yang dibatasi dari kiri atas sampai kanan
bawah akan digulung sebanyak AL, atau kalau AL =0 akan dibersihkan semua.
Kiri atas
Kanan bawah
Gambar 7.2. Wilayah layar yang digulung
Program berikut modifikasi dari program BIOS1.ASM dengan ditambahi hapus layar
terlebih dahulu dengan atribut warna hitam tulisan putih sebelum menaruh kursor dan
menulis di tengah layar.
Praktikum Pengantar Organisasi Komputer – pww
37
window
Bab VII : Output Layar
;BIOS2.ASM
;Program gulung layarcode_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai data db 'U N S$'mulai:
;persiapan hapus layar MOV AH,06 MOV AL,00 MOV BH,07 MOV DH,00 MOV DL,00 MOV CH,24 MOV CL,79 INT 10H ; hapus layar
;atur kursor MOV AH,02 MOV BH,00 MOV DH,11 MOV DL,38 INT 10H ;atur kursor
MOV AH,09 MOV DX,OFFSET data INT 21H ; tulis teks MOV AX,4C00H INT 21Hcode_seg ENDs END start
Mencetak karakter dan string
Dalam assembly autput layar dapat ditempuh dengan dua cara, yaitu dengan
menggunakan interupt dan dengan menulis ke buffer layar.
A. Menggunakan interupt
a. Cetak karakter
INT 10H servis 09 : cetak karakter dengan atribut
Praktikum Pengantar Organisasi Komputer – pww
38
Bab VII : Output Layar
Syarat register :
AH 09
AL kode ASCII karakter yang akan dicetak
BH nomor halaman layar
BL atribut layar (akan dijelaskan kemudian)
CX cacah karakter yang akan dicetak
INT 10H servis 0A : cetak karakter tanpa atribut
Syarat register :
AH 0AH
AL kode ASCII karakter yang akan dicetak
BH nomor halaman layar
CX cacah karakter yang akan dicetak
b. Cetak string
INT 21H servis 09
AH 09
DX OFFSET label data string dicetak
Contoh : Cetak karakter dengan atribut
Misalkan akan dicetak huruf A dengan warna tulisan merah dan warna
latar belakang biru, berikut adalah potongan programnya.MOV AH,09MOV BH,00MOV BL,14H ;atribut(tulisan merah background biru)MOV AL,41H ; kode ASCII karakter AMOV CX,0001 ; huruf dicetak 1INT 10H
Atribut karakter :
Atribut karakter disimpan oleh data satu byte, yang dibagi 2 yaitu 4 bit bawah
untuk foreground (latar depan) dan 4 bit atas untuk background (latar belakang).
Susunan dapat disajikan sebagai berikut :
Praktikum Pengantar Organisasi Komputer – pww
39
Bab VII : Output Layar
4 bit background 4 bit foreground
7 6 5 4 3 2 1 0
Blue Blue Green Green
Red Red Blink intensitas (1=terang)
Gambar 7.3. Atribut karakter
Tulisan merah, latar belakang biru diwakili oleh bit-bit :
0 0 0 1 0 1 0 0
yang dalam bentuk hexa desimal adalah : 14H
jika diingnkan tulisan merah terang latar belakang biru blink (berkedip) maka susunan
bit adalah :
1 0 0 1 1 1 0 0
dalam Hexa adalah : 9BH
Contoh-contoh program Cetak String :
;PROGRAM CETAK STRING DIAKHIRI $;DENGAN INT 21H servis 09;Cetak1.ASMCOde_seg segment Assume CS:code_seg
org 100hstart : jmp mulai data db 'UNS OYE$'mulai : MOV AH,09 MOV DX,OFFSET data INT 21H MOV AX,4C00H INT 21Hcode_seg Ends End start
Praktikum Pengantar Organisasi Komputer – pww
40
Bab VII : Output Layar
Hasil:
Gambar 7.4. Hasil Program Cetak1.ASM
;PROGRAM CETAK STRING PERHURUF ;DENGAN INT 21H servis 02;Cetak2.ASMCOde_seg segment Assume CS:code_seg org 100hstart : jmp mulai data db 'HADIAH SEBESAR $ 1000.000,00 ',0mulai : MOV AH,02 MOV BX,0000 cet: MOV DL,data[BX] CMP DL,0 JE selesai INT 21H INC BX JMP cetselesai: MOV AX,4C00H INT 21Hcode_seg Ends End start
Hasil :
Gambar 7.5. Hasil Program Cetak2.ASM
Praktikum Pengantar Organisasi Komputer – pww
41
Bab VII : Output Layar
7.3. Menulis langsung ke buffer layar
Ditempuh dengan memindah byte-byte penyusun string ke alamat buffer layar,
yaitu alamat 0B800H. Struktur memory buffer layar dapat diilustrasikan dalam
gambar berikut :
Peta memory layar
B800:0000B800:0001B800:0002B800:0004B800:0005B800:0006B800:0007B800:0008B800:0009...............
Gambar 7.6. Buffer Layar CGA
Aturan buffer layar dapat dijelaskan bahwa setiap byte pada addres :
B800:0000 : untuk kodeASCII pada posisi baris 0,kolom 0 di layar
B800:0001 : untuk atribut karakter pada posisi baris 0,kolom 0 di layar
B800:0002 : untuk kodeASCII pada posisi baris 0,kolom 1 di layar
B800:0003 : untuk atribut karakter pada posisi baris 0,kolom 1 di layar
............
dan seterusnya, sehingga untuk satu halaman layar diperlukan buffer sebesar
2*80*25=4000 byte. Dan apabila layar dibagai menjadi 4 halaman layar maka besar
memory untuk buffer layar adalah 4 x 4000 = 16.000 byte
Contoh :
Program tulis ke buffer layar
;PROGRAM CETAK STRING DGN TULIS KE BUFFER LAYAR;Cetak3.ASM
Praktikum Pengantar Organisasi Komputer – pww
42
41H
42H
....
AB
Bab VII : Output Layar
COde_seg segment Assume CS:code_seg org 100hstart : jmp mulai data db 'HADIAH SEBESAR $ 1000.000,00 ',0mulai : MOV BX,0000 MOV AX,b800H MOV DS,AX MOV DI,0000 cet: MOV DL,data[BX] CMP DL,0 JE selesai MOV BYTE PTR [DI],DL INC DI INC DI INC BX JMP cetselesai: MOV AX,4C00H INT 21Hcode_seg Ends End start
Gambar 7.7. Hasil Program Cetak3.ASM
;CETAK STRING DENGAN MEMINDAH KARAKTER;KE BUFFER LAYAR DENGAN MOVSB;Cetak4.ASMCode_seg segment Assume CS:code_seg org 100hstart : jmp mulai data db 'HALO INI CETAK KEEMPAT ',0mulai : MOV AX,0B800H ; awal layar MOV ES,AX MOV DI,0000H MOV SI,OFFSET data ; awal data CLD
Praktikum Pengantar Organisasi Komputer – pww
43
Bab VII : Output Layar
cet: CMP BYTE PTR [SI+00H],0 JE selesai MOVSB INC DI JMP cetselesai: MOV AX,4C00H INT 21Hcode_seg Ends End start
Praktikum Pengantar Organisasi Komputer – pww
44
Bab VIII :Input Keyboard
BAB VIII
INPUT KEYBOARD
Dalam assembly pemasukan data dari keyboard tidak seperti dalam high
level language (BASIC, PASCAL, C) yang dapat menerima berbagai macam tipe
data dari keyboard seperti integer, real, char dan string. Dalam assembly hanya
memiliki dua macam data input keyboard, yaitu :
- Input 1 karakter
- Input satu string (rangkaian karakter)
Beberapa interupt yang dapat digunakan untuk masukan keybord tersebut adalah :
8.1. Input karakter :
INT 21H servis 01 : input 1 karakter dari keyboard dengan ECHO (apa yang
diinputkan ditampilkan di layar)
Syarat: AH 01
Hasil : kode ASCII karakter yang diinput disimpan di register AL
INT 21H servis 07 : input 1 karakter dari keyboard tanpa ECHO (apa yang
diinputkan tidak ditampilkan di layar) tanpa mengecek ctrl-
break
Syarat : AH 07
Hasil : kode ASCII karakter yang diinput disimpan di register AL
INT 21H servis 08 : input 1 karakter dari keyboard tanpa ECHO (apa yang
diinputkan tidak ditampilkan di layar) dengan mengecek
ctrl-break (dapat dibreak dengan Ctrl-C)
Syarat : AH 08
Hasil : kode ASCII karakter yang diinput disimpan di register AL
INT 21H servis 06 : input 1 karakter dari keyboard tanpa menunggu
Syarat : AH 06 DL 0FFH
Praktikum Pengantar Organisasi Komputer – pww
45
Bab VIII :Input Keyboard
Hasil : kode ASCII karakter yang diinput disimpan di register AL
Input string (rangkaian karakter) :
INT 21H servis 0AH : membaca satu string dari keyboard sampai diketik ENTER
Syarat : AH 0AH
DX OFFSET label penampung (misal tampung)
Hasil : string tersimpan dalam label tampung
Contoh-Contoh Program Input Karakter :
;BACA1.ASM;Membaca 1 karakter dari keyboard;dengan INT 21H servis : 01code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai data db 'MASUKKAN HURUF BESAR (ESC=selesai) : $'mulai: MOV AH,09 MOV DX,OFFSET data INT 21H
;ambil karakterulang: MOV AH,01 INT 21H CMP AL,27 JE udah
MOV DL,AL ADD DL,20H ; ubah jadi huruf kecil MOV AH,02 INT 21H JMP ulangudah : MOV AX,4C00H INT 21Hcode_seg ENDs END start
Praktikum Pengantar Organisasi Komputer – pww
46
Bab VIII :Input Keyboard
Gambar 8.1. Hasil Pogram Baca1.ASM
;BACA2.ASM;Membaca 1 karakter dari keyboard;dengan INT 21H servis : 01code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai teks1 db 'MASUKKAN BILANGAN 1 ANGKA : $' teks2 db 10,13,'HELLO UNS $' teks3 db 10,13,'BUKAN BILANGAN, ULANG ! ',10,13,'$'mulai: MOV AH,09 MOV DX,OFFSET teks1 INT 21H
MOV AH,01 INT 21H CMP AL,30H JLE salah CMP AL,3AH JGE salah XOR CX,CX MOV CL,AL SUB CL,30H
MOV AH,09 MOV DX,OFFSET teks2 lagi : INT 21H LOOP lagi JMP selesai salah: MOV AH,09 MOV DX,OFFSET teks3 INT 21H JMP mulaiselesai: MOV AX,4C00H
Praktikum Pengantar Organisasi Komputer – pww
47
Bab VIII :Input Keyboard
INT 21Hcode_seg ENDs END start
Hasil program :
Gambar 8.2. Hasil Program Baca2.ASM
;BACA3.ASM;Membaca 1 karakter dari keyboard :TANPA Echo;dengan INT 21H servis : 08;untuk membuat pass word yang dapat dibreakcode_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai teks1 db 'MASUKKAN PASSWORD : $' teks2 db 10,13,'PASSWORD SALAH , ULANG !!',10,13,'$' teks3 db 10,13,'SELAMAT ANDA BOLEH MASUK ! ',10,13,'$' tampung db 'XXXXXXXXXXXX' kunci db 'PAKWW'mulai: MOV AH,09 MOV DX,OFFSET teks1 INT 21H XOR BX,BX
baca: MOV AH,08 ; baca kar dg cek ctrl brk INT 21H CMP AL,0DH JE cek MOV tampung[BX],AL MOV AH,02 MOV DL,2AH INT 21H
Praktikum Pengantar Organisasi Komputer – pww
48
Bab VIII :Input Keyboard
INC BX JMP baca cek : MOV CX,0007 XOR BX,BX cc: MOV AL,kunci[BX] CMP AL,tampung[BX] JNE salah INC BX LOOP cc
MOV AH,09 ; password ok MOV DX,OFFSET teks3 INT 21H JMP selesai
salah: MOV AH,09 MOV DX,OFFSET teks2 INT 21H JMP mulai
selesai: MOV AX,4C00H INT 21Hcode_seg ENDs END start
;BACA4.ASM;Membaca 1 karakter dari keyboard;dengan INT 21H servis : 01;tak mengecek ctrl break
code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai teks1 db 'MASUKKAN PASSWORD : $' teks2 db 10,13,'PASSWORD SALAH , ULANG !!',10,13,'$' teks3 db 10,13,'SELAMAT ANDA BOLEH MASUK ! ',10,13,'$' tampung db 'XXXXXXXXXXXX' kunci db 'PAKWW'mulai: MOV AH,09 MOV DX,OFFSET teks1 INT 21H XOR BX,BX
Praktikum Pengantar Organisasi Komputer – pww
49
Bab VIII :Input Keyboard
baca: MOV AH,07 ; baca kar TANPA cek ctrl brk INT 21H CMP AL,0DH JE cek MOV tampung[BX],AL MOV AH,02 MOV DL,2AH INT 21H INC BX JMP baca cek : MOV CX,0007 XOR BX,BX cc: MOV AL,kunci[BX] CMP AL,tampung[BX] JNE salah INC BX LOOP cc
MOV AH,09 ; password ok MOV DX,OFFSET teks3 INT 21H JMP selesai
salah: MOV AH,09 MOV DX,OFFSET teks2 INT 21H JMP mulai
selesai: MOV AX,4C00H INT 21Hcode_seg ENDs END start
Gambar 8.3. Hasil Program Baca4.ASM
Praktikum Pengantar Organisasi Komputer – pww
50
Bab VIII :Input Keyboard
;BACA5.ASM;input keyBOAR TANPA MENUNGGU code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulaidata db 'KETIK SEMBARANG TOMBOL DIANTARA *',10,13 db 'APA YANG DIKETIK AKAN DITAMPILKAN SECARA CEPAT',10,13 db 'UNTUK MENGAKHIRI : TEKAN TOMBOL ESC$'
mulai: MOV AH,09 MOV DX,OFFSET data INT 21H MOV AH,01 INT 21H ; tekan sembarang
baca: MOV AH,02 MOV DL,2AH INT 21H ; cetak '*'
MOV AH,06 MOV DL,0FFH INT 21H ; baca tombol tanpa menunggu
CMP AL,27 ; apakah ESC dipencet JE selesai MOV AH,02 MOV DL,AL ; jika ada input INT 21H ; cetak kar yang diinput
JMP baca selesai: MOV AX,4C00H INT 21Hcode_seg ENDs END start
Praktikum Pengantar Organisasi Komputer – pww
51
Bab VIII :Input Keyboard
Gambar 8.4. Hasil program Baca5.asm
8.2. Membaca String dari Keyboard
Untuk membaca string dari keyboard digunakan INT 21H servis 0AH
Sebelum pembacaan dilakukan harus disiapkan dulu ruang memory untuk
menampung hasil pembacaan, misalnya nama variabelnya adalah tampung. Definisi
adalah sebagai berikut :
tampung db nn,?,nn dup(?) berisi jumlah karakter ter-input kan
cacah byte maksimal ter-input
Misalkan akan dibaca string dengan maksimal karakter 20 maka definisinya adalah :tampung 20,?,20 dup(?)
Yang dapat digambarkandalam memory sebagai berikut :
tampung akan berisi informasi tentang cacah karakter terinputkan
;baca6.asm;membaca stringcode_seg SEGMENT ASSUME CS:code_seg ORG 100H
Praktikum Pengantar Organisasi Komputer – pww
52
20 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Bab VIII :Input Keyboard
start: JMP mulai data db 'MASUKKAN STRING (MAX 20 karakter, AKHIRI DENGAN ENTER) : $' tampung db 20,?,20 dup(?) hasil db 10,13,'YANG ANDA KETIK ADALAH : $'
mulai: MOV AH,09 MOV DX,OFFSET data INT 21H
;ambil string MOV AH,0AH MOV DX, OFFSET tampung INT 21H
;cetak hasil PUSH DX ; alamat tampung disimpan MOV AH,09 MOV DX,OFFSET hasil INT 21H
POP DX ; ambil alamat tampung INC DX MOV BX,DX MOV BYTE PTR CL,[BX] ; ambil cacah karakter ter-input XOR CH,CH ; sebagai counter loop
; cetak masukan string per karakter INC BX MOV AH,02ulang: MOV DL,[BX] INT 21H INC BX LOOP ulang MOV AX,4C00H INT 21Hcode_seg ENDs END start
Gambar 8.5. Hasil Program Baca6.ASM
Praktikum Pengantar Organisasi Komputer – pww
53
Bab VIII : Operasi Aritmetika
BAB IX
OPERASI ARITMATIKA
Operasi aritmatika dalam assembly ada 4 macam :
1. Operasi penambahan (ADD dan INC):
Syntax : ADD [operand1],[operand2]
Operand1 : register, nama variabel, lokasi memory
Operand2: register,nama variabel, lokasi memory, data atau ekspresi
Contoh: ADD BX,AX ; isi BX ditambahi dengan isi AX
ADD AH,AL ;isi AH ditambahi dengan AL
ADD Nilai,4*5 ;isi variabel Nilai ditambahi hasil 4*5
Untuk penambahan dengan 1, instruksi juga dapat dipakai INC, dengan sintax:
INC [register/variabel/memory]
Contoh: INC DX ; isi DX dinaikkan 1
Contoh program berikut memperagakan perintah ADD (pada baris cetak tebal)
code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai N dw 0mulai: MOV AX,0001 ADD N,AX ;isi var N ditambahi 1 ADD N,40H+1 ;isi var N menjadi 42H XOR DX,DX ;kosongkan DX ADD DX,N ;tambahi DX dengan isinya N=42 XOR DH,DH ;isi DL adalah 42H MOV AH,02 INT 21H ;cetak huruf B
MOV AX,4C00H INT 21Hcode_seg ENDs END start
Hasil program adalah mencetak karakter : B
Praktikum Pengantar Organisasi Komputer – pww
54
Bab VIII : Operasi Aritmetika
2. Operasi pengurangan (SUB dan DEC)
Syntax : SUB [operand1],[operand2]
Contoh: SUB BX,102AH ; isi BX dikurangi dengan 102AH
SUB AH,AL ;isi AH dikurangi dengan AL
SUB DH,30H ;isi DH dikurangi 30H
Untuk pengurangan dengan 1, instruksi juga dapat dipakai DEC, dengan sintax:
DEC [register/variabel/memory]
Contoh: DEC DX ; isi DX dikurangi 1
3. Operasi perkalian (MUL)
Tidak seperti operasi ADD dan operasi SUB yang merupakan instruksi dua operand,
untuk operasi perkalian dengan instruksi MUL adalah instruksi satu operand, yaitu :
Syntax : MUL [reg]
Dimana reg dapat berupa register 8 bit atau 16 bit , sedangkan perkalian akan
dilakukan antara register yang dimaksud dalam reg dengan AL (jika reg adalah 8bit)
atau dengan AX(jika reg 16 bit)
Perkalian 8 bit:
Contoh : MUL DL
Hasil :isi register DL akan dikalikan dengan isi register AL dan hasil perkalian
akan disimpan dalam register AX
Jadi misalkan isi DL=4 dan isi AL=8
Perintah MUL DL
Akan menyebabkan isi register AX =4*8=32
Perkalian 16 bit:
Contoh : MUL BX
Hasil :isi register BX akan dikalikan dengan isi register AL dan hasil perkalian
akan disimpan dalam register AX jika nilainya <FFFFH. Apabila
Praktikum Pengantar Organisasi Komputer – pww
55
Bab VIII : Operasi Aritmetika
nilainya lebih dari FFFFH hasil akan tersimpan dalam dua register,
yaitu : DX:AX
Misalkan isi BX = FFFFh , isi AX=0002h
Perintah MUL BX
Akan menghasilkan : 1FFFEh, ini bernilai lebih dari FFFFh, maka
hasilnya tersimpan dalam DX:AX =0001FFFEh, sehingga :
DX=0001h dan AX=FFFEh.
4. Operasi pembagian (DIV)
Seperti dalam operasi MUL, operasi DIV juga operasi dengan satu operand :
Syntax : DIV [reg]
Dengan nilai reg dapat berupa register 8bit atau register 16 bit.
Pembagian 8 bit:
Contoh : DIV DL
Prosesor akan melakukan pembagian AX dibagi dengan DL, sebagai berikut :
AH=sisa AL=hasil
DL AX
Pada awalnya AX berisi data yang akan dibagi, apabila operasi DIV telah
dilakukan maka AX tidak lagi berisi data semula tetapi berisi informasi tentang hasil
bagi dan sisa hasil bagi.
Pembagian 16 bit:
Contoh : DIV BX
Prosesor akan melakukan pembagian DX:AX dibagi dengan BX, sebagai berikut :
DX=sisa AX=hasil
BX DX:AX
Pada awalnya DX:AX berisi data yang akan dibagi, apabila operasi DIV telah
dilakukan maka DX:AX tidak lagi berisi data semula tetapi berisi informasi tentang
hasil bagi dan sisa hasil bagi.
Praktikum Pengantar Organisasi Komputer – pww
56
Bab VIII : Operasi Aritmetika
Contoh pembagian 8 bit :
Contoh program DEBUG berikut menampilkan urutan pengisian AX
dengan data 20h (=32 desimal), mengisi register DL dengan 06, melaksanakan
pembagian. Setelah instruksi DIV DL dilakukan isi AX adalah : 0205 , yang berarti
AH=02 =sisa hasil bagi, dan AL=05=hasil bagi (32/6).
Program dijalankan dengan t (trace), instruksi satu-persatu dan isi register
ditampilkan :
Gambar 8.1. Pembagian 8 bit
Contoh lain untuk proses pembagian adalah seperti program berikut. ;ARIT1.ASM;CONTOH PEMBAGIAN 8 BIT;code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai HASIL db 0
SISA db 0
Praktikum Pengantar Organisasi Komputer – pww
57
Bab VIII : Operasi Aritmetika
TEKS0 DB 'PEMBAGIAN 8 BIT : 28 DIBAGI 5 $' TEKS1 DB 10,13,'HASIL BAGI : $' TEKS2 DB 10,13,'SISA : $'mulai: MOV AH,09 MOV DX,OFFSET TEKS0 INT 21H ;CETAK KETERANGAN
MOV AX,28 ;YANG DIBAGI TARUH DI AX MOV DL,5 ;PEMBAGI TARUH DI DL DIV DL ; BAGI 29 DENGAN 5 MOV HASIL,AL ; AMANKAN HASIL MOV SISA ,AH ; AMANKAN SISA
;CETAK HASIL DAN SISA MOV AH,09 MOV DX,OFFSET TEKS1 INT 21H ; CETAK KETERANGAN HASIL
MOV AH,02 MOV DL,HASIL ADD DL,30H INT 21H ; CETAK HASIL
MOV AH,09 MOV DX,OFFSET TEKS2 INT 21H ; CETAK KETERANGAN SISA
MOV AH,02 MOV DL,SISA ADD DL,30H INT 21H ; CETAK HASIL
MOV AX,4C00H INT 21Hcode_seg ENDs END startHasil program adalah seperti tampilan berikut :
Gambar 9.2. Operasi DIV
Praktikum Pengantar Organisasi Komputer – pww
58
Bab VIII : Operasi Aritmetika
Aplikasi Operasi Aritmetika Untuk Mencetak Bilangan :
Salah satu aplikasi dari instruksi DIV misalnya adalah untuk mencetak
bilangan. Adalah satu masalah tersendiri dalam assembly untuk mencetak bilangan
ke layar. Padahal kadangkala diperlukan untuk mencetak bilangan, misalnya akan
diketahui free memory dari RAM kita, berarti setelah interupt untuk itu dijalankan,
hasilnya berupa bilangan harus dicetak ke layar. Kenapa mencetak bilangan tidak
semudah mencetak karakter ? jawabnya, karena fasilitas yang dimiliki adalah
interupt untuk mencetak karakter atau mencetak string. Dengan demikian apabila
dimiliki isi register AX, misalnya sama dengan 453 (desimal) maka untuk mencetak
bilangan 453 (desimal) tersebut ke layar berarti harus di’siasati’ bagaimana dapat
dicetak berturut-turut karakter :’4’,’5’ dan ‘3’.
Berikut ini adalah programnya:
;cetakbil.asm;mencetak bilangan per karakter penyusun bilangan tsb;code_seg SEGMENT ASSUME CS:code_seg ORG 100Hstart: JMP mulai Nilai dw 453 data db 'ISI variabel Nilai adalah :$' mulai: MOV AH,09 MOV DX,OFFSET data INT 21H
MOV AX,Nilai ;pindahkan isi var Nilai ke AX XOR CX,CX ;CX=0000ulang: MOV BH,10 DIV BH ;bagi AX dengan BH PUSH AX ;simpan AX di STACK INC CX XOR AH,AH ;AH=00 CMP AL,00 JNE ulang ;AL tidak nol ke ulang lagi: POP DX MOV DL,DH ADD DL,30H MOV AH,02 INT 21H ;cetak karakter angka LOOP lagi
Praktikum Pengantar Organisasi Komputer – pww
59
Bab VIII : Operasi Aritmetika
MOV AX,4C00H INT 21Hcode_seg ENDs END start
Hasil eksekusi program adalah sebagai berikut :
Gambar 9.3. Hasil program cetak bilangan
Praktikum Pengantar Organisasi Komputer – pww
60