BAB
I
PENDAHULUAN
1.1.
Latar
Belakang
Bahasa
assembly merupakan bahasa aras bawah, dimana merupakan bahasa mesin, sangat
banyak keuntungan yang kita dapatkan dari belajar bahasa ini, diantaranya kita
bisa belajar untuk mengakses hardware secara langsung,disamping ukuran file
hasil kompilasi juga kecil.
Dan
juga, Bahasa Assembly (Assembler) adalah merupakan salah satu dari sekian
banyak bahasa pemrograman yang tergolong dalam Bahasa Pemrogaman Tingkat Rendah
(Low Level Language) dan hanya setingkat diatas bahasa mesin (Machine Language).
(Low Level Language) dan hanya setingkat diatas bahasa mesin (Machine Language).
Dalam penulisan laporan praktikum
ini, penyusun akan memberikan beberapa pengertian yang berhubungan dengan judul
laporan, karena tanpa pengertian yang jelas akan menyebabkan informasi yang
disajikan tidak sesuai dengan hasil praktikum yang dipaparkan.
Namun
tidak dapat dipungkiri bahasa pemrograman tingkat rendah ini memiliki banyak
keunggulan dalam hal kecepatan, ukuran file yang kecil serta kemudahan dalam
manipulasi system computer.
Maka
oleh karena itu, penyusun merasa penting untuk menyusun laporan yang akan
membantu mahasiswa dalam memahami isi yang terkandung dalam bahasa assembly.
1.2.
Tujuan
Praktikum
1. Untuk memperkenalkan pemrograman
mikroprosesor terutama assembly.
2. Untuk memberikan pengetahuan bagaimana
memanipulasi system computer dengan menggunakan bahasa assembly.
3.
Agar mahasiswa bisa mengaplikasikan bahasa
assembly.
1.3.
Manfaat Praktikum
1.
Menambah
wawasan mengenai pemrograman mikroprosesor.
2.
Memberikan
pengetahuan mengenai manipulasi system computer.
3.
Memberikan
pemahaman bagaimana menerapkan bahasa assembly.
BAB
II
LANDASAN TEORI
2.1.
Memulai Dengan Assembly
Bahasa rakitan (bahasa Inggris:
assembly language) adalah bahasa pemrograman komputer tingkat rendah. Bahasa
rakitan merupakan notasi untuk bahasa mesin yang dapat dibaca oleh manusia dan
berbeda-beda tergantung dari arsitektur komputer yang digunakan.Bahasa mesin
adalah pola bit-bit (serangkaian nomor-nomor biner) tertentu yang merupakan
kode operasi mesin. Bahasa mesin dibuat lebih mudah dibaca dan ditulis dengan
cara mengganti pola bit-bit menjadi julukan-julukan yang disebut mnemonics.
Untuk
menuliskan source file untuk program assembly, kita bisa menggunakan berbagai
editor, misalkan SideKick, WordStar, Word Perfect, dengan mengetikkan edit.
Source file yang digunakan harus berbentuk file ASCII dan berekstensi .ASM.
Source file
.ASM yang diketikkan perlu decompile ke bentuk .OBJ dan akhirnya disinilah file
tersebut akan diubah menjadi file .COM atau .EXE. Untuk mengcompile kita bisa
mengetikkan perintah sbb:
C:\>tasm coba
Turbo Assembler Version
2.0 Copyright (c) 1988,
1990 Borland International
Assembling file: coba.ASM
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 307k
C:\>dir coba.*
Volume in drive C is S’to
Directory of C:\
COBA OBJ 128 08-12-94
10:42p
COBA ASM 128 08-12-94
10:41p
2 file(s) 246 bytes
1,085,952 bytes free
Kemudian
file .OBJ tersebut diubah menjadi file berekstensi .COM atau .EXE dengan
menggunakan linking dengan perintah berbeda seperti di bawah ini.
Untuk file .EXE:
C:\>tlink coba
Turbo Link Version 3.0
Copyright (c) 1987,
1990 Borland International
Untuk file .COM:
C:\>tlink/t coba
Turbo Link Version 3.0
Copyright (c) 1987,
1990 Borland International
Assembler mengizinkan penggunaan
beberapa bentuk angka seperti desimal, biner, heksadesimal dan karakter.Untuk
masing-masing angka dapat ditambahkan huruf di akhir angka tersebut.Huruf ‘D’
untuk desimal, ‘B’ untuk biner dan ‘H’ untuk heksadesimal.Perlu diperhatikan
bahwa bila tipe heksa yang digunakan adalah karakter angka nol harus
ditambahkan didepannya.Sementara untuk penggunaan karakter di Assembler harus
menggunakan tanda apit.
Dalam penggunaan label, pemberian
namanya dapat menggunakan baik huruf, angka dan karakter khusus.Nama pada label
tidak boleh terdapat spasi dan didahului oleh angka, Contoh dari penulisan
label yang benar: mulai: MOV CX,7. Nama label terpanjang yang dapat dikenali
oleh assembler adalah 31 karakter.
Untuk memberikan komentar dalam
assembly, dapat menggunakan tanda ‘;’ apapun yang ditulis di belakang tanda ‘;’
akan dianggap sebagai komentar. Sementara perintah MOV digunakan untuk mengcopy
suatu nilai ke register,variabel atau memory. Untuk menginterupsi digunakan
perintah INT. adapaun cara panulisannya adalah INT NoInt. NoInt disini adalah
nomor interupsi yang ingin dihasilkan.
2.2.
Membuat Program COM
Untuk
membuat program .COM yang hanya menggunakan 1 segment, bisa anda buat dengan
model program seperti gambar 6.1. Bentuk yang digunakan disini adalah bentuk
program yang dianjurkan(Ideal). Dipilihnya bentuk program ideal dalam buku ini
dikarenakan pertimbangan dari berbagai keunggulan bentuk program ideal ini
seperti, prosesnya lebih cepat dan lebih mudah digunakan oleh berbagai bahasa
tingkat tinggi yang terkenal(Turbo Pascal dan C).
.MODEL SMALL
.CODE
ORG 100H
Label1 :JMP Label2
+---------------------+
| TEMPAT DATA PROGRAM |
+---------------------+
Label2 :
+---------------------+
| TEMPAT PROGRAM |
+---------------------+
INT 20H
END Label1
Supaya
lebih jelas bentuk dari program ideal, marilah kita telusuri lebih lanjut dari
bentuk program ini.
2.2.1.
MODEL SMALL
Tanda directive ini digunakan untuk
memberitahukan kepada assembler bentuk memory yang digunakan oleh program kita.
Supaya lebih jelas model-model yang bisa digunakan adalah :
TINY
Jika program anda hanya menggunakan 1
segment seperti program COM. Model ini disediakan khusus untuk program COM.
SMALL
Jika data dan code yang digunakan oleh
program kurang dari ukuran 1 segment atau 64 KB.
MEDIUM
Jika data yang digunakan oleh program
kurang dari 64 KB tetapi code yang digunakan bisa lebih dari 64 KB.
- COMPACT
Jika data yang digunakan bisa lebih
besar dari 64 KB tetapi codenya kurang dari 64 KB.
- LARGE
Jika data dan code yang dipakai oleh
program bisa lebih dari 64 KB.
- HUGE
Jika data,
code maupun array yang digunakan bisa lebih dari 64 KB.
Mungkin ada yang bertanya-tanya mengapa pada program COM yang
dibuat digunakan model SMALL dan bukannya TINY ?Hal ini disebabkan karena
banyak dari compiler bahasa tingkat tinggi yang tidak bisa berkomunikasi dengan
model TINY, sehingga kita menggunakan model SMALL sebagai pemecahannya.
2.2.2.
CODE
Tanda directive ini digunakan untuk
memberitahukan kepada assembler bahwa kita akan mulai menggunakan Code
Segment-nya disini. Code segment ini digunakan untuk menyimpan program yang
nantinya akan dijalankan.
2.2.3.
ORG 100h
Pada program COM perintah ini akan
selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya
program pada saat dijalankan(diload ke memory) ditaruh mulai pada offset ke
100h(256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong
pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh
PSP(Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS
untuk mengontrol jalannya program tersebut.
2.2.4.
JMP
Pada program COM perintah ini akan
selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya
program pada saat dijalankan(diload ke memory) ditaruh mulai pada offset ke
100h(256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong
pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh
PSP(Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS
untuk mengontrol jalannya program tersebut.Perintah JMP(JUMP) ini digunakan
untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP. Adapun
syntaxnya adalah:
JUMP Tujuan .
Dimana tujuannya dapat berupa label
seperti yang digunakan pada bagan diatas. Mengenai perintah JUMP ini akan kita
bahas lebih lanjut nantinya.
Perintah JUMP yang digunakan pada bagan diatas dimaksudkan agar
melewati tempat data program, karena jika tidak ada perintah JUMP ini maka data
program akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan
program anda menjadi Hang.
2.2.5.
INT 20h
Perintah INT adalah suatu
perintah untuk menghasilkan suatu interupsi dengan syntax:
INT NoInt
Interupsi 20h berfungsi untuk mengakhiri
program dan menyerahkan kendali sepenuhnya kepada Dos. Pada program COM cara
ini bukanlah satu-satunya tetapi cara inilah yang paling efektif untuk
digunakan. Bila anda lupa untuk mengakhiri sebuah program maka program anda
tidak akan tahu kapan harus selesai, hal ini akan menyebabkan komputer menjadi
hang.
2.3.
Mencetak Huruf
2.3.1.
Mencetak Huruf
Bila dihasilkan interupsi 21h apa yang
akan dikerjakan oleh komputer ?.Jawabnya, ada banyak sekali kemungkinan. Pada
saat terjadi interupsi 21h maka pertama-tama yang dilakukan komputer adalah
melihat isi atau nilai apa yang terdapat pada register AH. Misalkan bila nilai
AH adalah 2 maka komputer akan mencetak sebuah karakter, berdasarkan kode ASCII
yang terdapat pada register DL. Bila nilai pada register AH bukanlah 2, pada
saat dilakukan interupsi 21h maka yang dikerjakaan oleh komputer akan lain
lagi.
Dengan demikian kita bisa mencetak
sebuah karakter yang diinginkan dengan meletakkan angka 2 pada register AH dan
meletakkan kode ASCII dari karakter yang ingin dicetak pada register DL sebelum
menghasilkan interupsi 21h.
2.3.2.
Mencetak Karakter Beserta Atribut
Sebuah karakter disertai dengan warna
tentunya akan lebih menarik. Untuk itu anda bisa menggunakan interupsi ke 10h
dengan aturan pemakaiannya :
INPUT
AH = 09h
AL = Kode ASCII dari karakter yang akan dicetak
BH = Nomor halaman(0 untuk halaman 1)
BL = Atribut atau warna dari karakter yang akan dicetak
CX = Banyaknya karakter tersebut akan dicetak
Setelah semua register dimasukkan
nilainya maka lakukanlah interupsi 10h. Perlu anda perhatikan bahwa interupsi
ini mencetak karakter tanpa menggerakkan kursor.
2.3.3.
Pengulangan Dengan Loop
Perintah LOOP digunakan untuk melakukan
suatu proses yang berulang-ulang. Adapun syntax dari perintah ini adalah :
LOOP Tujuan
Tujuan dapat berupa suatu label yang
telah didefinisikan, contoh:
MOV CX,3 ; Banyaknya pengulangan yang dilakukan
Ulang : INT 10h ; Tempat terjadinya pengulangan
LOOP Ulang ; Lompat ke label 'Ulang'
Pada proses pengulangan dengan perintah
LOOP, register CX memegang suatu peranan yang khusus dimana register ini
dijadikan sebagai counter/penghitung terhadap banyaknya looping yang boleh
terjadi. Setiap ditemui perintah LOOP, maka register CX akan dikurangi dengan 1
terlebih dahulu, kemudian akan dilihat apakah CX sudah mencapai 0. Proses
looping akan selesai bila nilaipada register CX mencapai nol.
Seperti pada contoh diatas, maka interupsi 10h akan dihasilkan sebanyak 3
kali(sesuai dengan nilai CX).
Perlu diperhatikan bahwa jangan sampai anda menaruh
CX kedalam proses LOOP karena hal ini akan menyebabkan nilai CX diSET terus
sehingga proses looping tidak bisa berhenti.
TRICK:
Bila anda menetapkan nilai CX menjadi nol pada saat
pertama kali sebelum dilakukan loop, maka anda akan mendapatkan proses looping
yang terbanyak. Hal ini dikarenakan proses pengurangan 0 dengan 1 akan menghasilkan
nilai FFFFh(-1), Contoh :
MOV
CX,00
Ulang:
LOOP Ulang
2.3.4.
Mencetak Beberapa Karakter
Untuk
mencetak beberapa karakter digunakan fungsi looping. Nantinya pada program akan
ditambahkan register DL dengan 1 yang merupakan fungsi increment yang akan
dibahas pada subbab selanjutnya.
2.4.
Operasi Aritmatika
2.4.1.
Operasi Penambahan
a)
ADD
Untuk menambah dalam bahasa assembler
digunakan perintah ADD dan ADC serta INC. Perintah ADD
digunakan dengan syntax :
ADD Tujuan,Asal
Perintah ADD ini akan menambahkan nilai
pada Tujuan dan Asal. Hasil yang didapat akan ditaruh pada Tujuan, dalam bahasa
pascal sama dengan instruksi Tujuan:=Tujuan + Asal. Sebagai contohnya :
MOV AH,15h ; AH:=15h
MOV AL,4 ; AL:=4
ADD AH,AL ; AH:=AH+AL,
jadi AH=19h
Perlu anda perhatikan bahwa pada
perintah ADD ini antara Tujuan dan Asal harus mempunyai daya tampung yang sama,
misalnya register AH(8 bit) dan AL(8 bit), AX(16 bit) dan BX(16 bit).
Mungkin ada yang bertanya-tanya, apa
yang akan terjadi bila Tujuan tempat hasil penjumlahan disimpan tidak mencukupi
seperti pertambahan 1234h dengan F221h.
1234 h Biner --> 0001
0010 0011 0100
F221 h Biner --> 1111
0010 0010 0001
---------- +
--------------------- +
10455 h 1 0000 0100 0101
0101
Pada pertambahan diatas dapat dilihat
bahwa pertambahan bilangan 1234 dengan F221 akan menghasilkan nilai 10455.
Supaya lebih jelas dapat anda lihat pada pertambahan binernya dihasilkan bit ke
17, padahal register terdiri atas 16 bit saja. Operasi pertambahan yang
demikian akan menjadikan carry flag menjadi satu, Contoh :
MOV AX,1234h ; NIlai AX:=1234h dan carry=0
MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
ADD AX,BX ; Nilai AX menjadi 0455h dan carry=1
b)
ADC
Perintah ADC digunakan dengan cara yang
sama pada perintah ADD, yaitu :
ADC Tujuan,Asal
Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil
pertambahan Tujuan dan Asal ditambah lagi dengan carry flag
(Tujuan:=Tujuan+Asal+Carry). Pertambahan yang demikian bisa memecahkan masalah
seperti yang pernah kita kemukakan, seperti pertambahan pada bilangan
12345678h+9ABCDEF0h.
Seperti yang telah kita ketahui bahwa
satu register hanya mampu menampung 16 bit, maka untuk pertambahan seperti yang
diatas bisa anda gunakan perintah ADC untuk memecahkannya, Contoh:
MOV AX,1234h ; AX = 1234h
CF = 0
MOV BX,9ABCh ; BX = 9ABCh
CF = 0
MOV CX,5678h ; BX = 5678h
CF = 0
MOV DX,0DEF0h ; DX = DEF0h
CF = 0
ADD CX,DX ; CX = 3568h CF
= 1
ADC AX,BX ; AX = AX+BX+CF
= ACF1
Hasil penjumlahan akan ditampung pada
register AX:CX yaitu ACF13568h.
Adapun flag-flag yang terpengaruh oleh perintah ADD dan ADC ini
adalah CF,PF,AF,ZF,SF dan OF
c)
INC
Perintah INC(Increment) digunakan khusus
untuk pertambahan dengan 1. Perintah INC hanya menggunakan 1 byte memory,
sedangkan perintah ADD dan ADC menggunakan 3 byte. Oleh sebab itu bila anda
ingin melakukan operasi pertambahan dengan 1 gunakanlah perintah INC. Syntax
pemakainya adalah :
INC Tujuan
Nilai pada tujuan akan ditambah dengan
1, seperti perintah Tujuan:=Tujuan+1 dalam Turbo Pascal. Tujuan disini dapat
berupa suatu register maupun memory. Contoh : perintah INC AL akan menambah
nilai di register AL dengan 1. Adapun flag yang terpengaruh oleh perintah ini
adalah OF,SF,ZF,AF dan PF.
d)
Program Penambahan dan
Debug
Pada program penambahan, setelah dikadikan program COM, cobalah
menggunakan debug untuk melihat kebenaran dari hasil penjumlahan tersebut,
perintahnya adalah:
C:\>debug Tambah.com
-r < tekan enter >
AX=0000 BX=0000 CX=0030
DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=3597 ES=3597 SS=3597
CS=3597 IP=0100 NV UP EI PL NZ NA PO NC
3597:0100 B415 MOV AH,15
-t < tekan enter >
Ulangilah perintah –t disini sampai nilai INT 20 muncul,
kemudian tekanlah –Q.
2.4.2.
Operasi Pengurangan
a.
SUB
Untuk Operasi pengurangan dapat digunakan perintah
SUB dengan syntax:
SUB Tujuan,Asal
Perintah SUB akan mengurangkan nilai pada Tujuan
dengan Asal. Hasil yang didapat akan ditaruh pada Tujuan, dalam bahasa pascal
sama dengan instruksi Tujuan:=Tujuan-Asal.
Contoh
:
MOV AX,15 ; AX:=15
MOV BX,12 ; BX:=12
SUB AX,BX ; AX:=15-12=3
SUB AX,AX ; AX=0
Untuk menolkan suatu register bisa anda kurangkan
dengan dirinya sendiri seperti SUB AX,AX.
b.
SBB
Seperti pada operasi
penambahan, maka pada operasi pengurangan dengan bilangan yang besar(lebih dari
16 bit), bisa anda gunakan perintah SUB disertai dengan SBB(Substract With
Carry). Perintah SBB digunakan dengan syntax:
SBB Tujuan,Asal
Perintah SBB akan mengurangkan nilai Tujuan dengan
Asal dengan cara yang sama seperti perintah SUB, kemudian hasil yang didapat
dikurangi lagi dengan Carry Flag(Tujuan:=Tujuan-Asal-CF).
c.
DEC
Perintah DEC(Decrement) digunakan khusus untuk
pengurangan dengan 1. Perintah DEC hanya menggunakan 1 byte memory, sedangkan
perintah SUB dan SBB menggunakan 3 byte. Oleh sebab itu bila anda ingin
melakukan operasi pengurangan dengan 1 gunakanlah perintah DEC. Syntax
pemakaian perintah dec ini adalah:
DEC Tujuan
Nilai pada tujuan akan dikurangi 1, seperti perintah
Tujuan:=Tujuan-1 dalam Turbo Pascal. Tujuan disini dapat berupa suatu register
maupun memory. Contoh : perintah DEC AL akan mengurangi nilai di register AL
dengan 1.
2.4.3.
Operasi Perkalian
Untuk perkalian bisa digunakan perintah
MUL dengan syntax:
MUL Sumber
Sumber disini dapat berupa suatu
register 8 bit(Mis:BL,BH,..), register 16 bit(Mis: BX,DX,..) atau suatu
varibel. Ada 2 kemungkinan yang akan terjadi pada perintah MUL ini sesuai
dengan jenis perkalian 8 bit atau 16 bit.
Bila Sumber merupakan 8 bit seperti MUL
BH maka komputer akan mengambil nilai yang terdapat pada BH dan nilai pada
AL untuk dikalikan. Hasil yang didapat akan selalu disimpan pada register AX.
Bila sumber merupakan 16 bitseperti MUL BX maka komputer akan mengambil
nilai yang terdapat pada BX dan nilai pada AX untuk dikalikan. Hasil yang
didapat akan disimpan pada register DX dan AX(DX:AX), jadi register DX
menyimpan Word tingginya dan AX menyimpan Word rendahnya.
2.4.4.
Pembagian
Operasi pada pembagian pada dasarnya
sama dengan perkalian. Untuk operasi pembagian digunakan perintah DIV dengan
syntax:
DIV Sumber
Bila sumber merupakan operand 8
bit seperti DIV BH, maka komputer akan mengambil nilai pada register AX
dan membaginya dengan nilai BH. Hasil pembagian 8 bit ini akan disimpan pada
register AL dan sisa dari pembagian akan disimpan pada register AH.
Bila sumber merupakan operand 16
bit seperti DIV BX, maka komputer akan mengambil nilai yang terdapat
pada register DX:AX dan membaginya dengan nilai BX. Hasil pembagian 16 bit ini
akan disimpan pada register AX dan sisa dari pembagian akan disimpan pada
register DX.
2.5.
Manipulasi Bit dan Logika
2.5.1.
Gerbang NOT
Operator NOT akan menginvers suatu nilai
seperti yang terlihat pada gambar di bawah ini.
+-----+----------+
| A |
Not (A) |
+-----+----------+
| 0 | 1 |
| 1 | 0
|
+-----+----------+
Operasi Not di dalam assembler,
digunakan dengan syntax :
NOT Tujuan,Sumber
Hasil dari operasi not ini akan disimpan
pada Tujuan, sebagai contoh, instruksi NOT AL,3Fh akan
menghasilkan nilai C0h bagi AL. Mungkin masih ada pembaca yang bingung dengan
operasi ini. Baiklah untuk lebih jelasnya kita lihat operasi di atas secara per
bit.
3 F
+--+-++--+-+
Bilangan : 0011 1111
C 0
+--+-++--+-+
Not : 1100 0000
2.5.2.
Gerbang AND
Operator AND akan menghasilkan nilai nol
bila salah satu operandnya bernilai nol. Dan hanya akan bernilai satu bila
kedua operandnya bernilai satu.
+-----+-----+----------+
| A | B | A AND B
|
+-----+-----+----------+
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
+-----+-----+----------+
Operasi AND di dalam assembler, digunakan dengan
syntax :
AND Tujuan,Sumber
Hasil dari operasi AND ini akan disimpan pada Tujuan,
sebagai contoh, instruksi :
MOV AL,3Fh
MOV BL,1Ah
AND AL,BL
Perintah diatas akan menghasilkan nilai 1A bagi
register AL. Ingatlah :
Setiap
bit yang di AND dengan 0 pasti menghasilkan bit 0 juga, sedangkan setiap
bit yang di AND dengan 1 akan menghasilkan bit itu sendiri.
2.5.3.
Gerbang OR
Operator
logik OR akan menghasilkan nilai nol bila kedua operannya bernilai nol dan satu
bila salah satunya bernilai satu.
+-----+-----+----------+
| A | B | A OR
B |
+-----+-----+----------+
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 |
0 | 1 |
| 1 |
1 | 1 |
+-----+-----+----------+
Operasi OR di dalam assembler, digunakan dengan
syntax :
OR Tujuan,Sumber
Hasil dari operasi OR ini akan disimpan pada Tujuan,
sebagai contoh, instruksi :
MOV AL,3Fh
MOV BL,1Ah
OR
AL,BL
Hasil
operasi OR diatas akan menghasilkan nilai 3F bagi register AL.
Ingatlah
:
Setiap bit yang di OR dengan 0 pasti
menghasilkan bit itu sendiri, sedangkan setiap bit yang di OR dengan 1
pasti menghasilkan bit 1.
2.5.4.
Gerbang XOR
Operator XOR akan menghasilkan nol untuk dua nilai
yang sama nilainya dan satu untuk yang berbeda.
+-----+-----+----------+
| A | B |
A XOR B |
+-----+-----+----------+
| 0 | 0 | 0|
| 0 | 1 | 1
|
| 1 | 0 | 1|
| 1 |1 | 0|
+-----+-----+----------+
Operasi XOR di dalam assembler, digunakan dengan
syntax :
XOR Tujuan,Sumber
Hasil dari operasi XOR ini akan disimpan pada Tujuan,
sebagai, contoh instruksi :
MOV AX,0A12h
XOR AX,AX
Hasil operasi XOR diatas pasti akan menghasilkan
nilai 0 bagi register AX.
Ingatlah:
Setiap
bilangan yang di XOR dengan bilangan yang sama pasti menghasilkan
bilangan 0.
BAB III
HASIL PRAKTIKUM
3.1.
Mencetak
Huruf
1.
Mencetak
Huruf Biasa
Listing Program
Hasil Eksekusi
Analisa Program
Nilai servis 02h
dimasukkan kedalam AH melalui perintah MOV, kemudian karakter A disimpan
sementara pada variable DL kemudian dicetak melalui perintah INT 21h.Dan pogram
berakhir dengan perintah INT 20h.
Mencetak Karakter
Beserta Atribut
Listing
Program
Hasil Eksekusi
Analisa
Program
Pada program di atas:
MOV AH, 09h à
Nilai servis yang digunakan untuk
mencetak karakter
MOV AL,'A' à
Karakter yang akan dicetak dan disimpan sementara ke variable AL
MOV BH, 00h àNomor
Halaman layar
MOV BL, 93h à digunakan untuk memblokn dan memberi
wrna pada karakter
MOV CX, 03h à
Karakter A akan diulang sebanyak 3 kali sehingga hasilnya seperti pada hasil
eksekusi di atas.Dan program dilaksanakan dengan perintah INT 10h.
Mencetak
Beberapa Karakter
Listing
Program
Hasil
Eksekusi
Analisa
Program
MOV AH, 02h àNilai servis yang digunakan untuk
mencetak karakter
MOV DL,'A' à
Karakter yang akan dicetak dan disimpan sementara ke variable DL
MOV CX, 10h à
karakter akan diulang sebanyak 10h (16 kali)
Ketika CX bernilai 1 maka karakter yang akan dicetak adalah A dan nilai
DL ditambah 1 kemudian program akan kembali ke perintah di atas dan nilai DL
berubah menjadi B dan karakter B dicetak ke layar. Begitu juga seterusnya
program akan mengulang samapai CX bernilai 10h (16) sehingga hasil yang dicetak
seperti hasil eksekusi di atas. Ketika nilai CX sudah lebih dari 10h(16) maka
program akan keluar.
3.2.
Operasi
Aritmatika
1.
Operasi
Penambahan
a.
ADD
Listing
Program
Hasil Debug
Analisa
Program
MOV AH, 15h ànilai 15h disimpan ke variabel AH
MOV AL, 4 ànilai 4 disimpan ke variabel AL
Ktika perintah ADD AH,AL dilaksanakan,
program akan menjumlahkan nilai yang ada pada variabel AH dengan variabel AL
dan hasilnya disimpan pada variabel AH, sehingga hasil penjumlahananya adalah
19 dan pada variabel AL nilainya tetap 04 karena nilai tersebut adalah nilai
terendah, sehingga hasilnya adalah 1904.
b.
ADC
ListingProgram
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AX,1234h
MOV BX,9ABCh
MOV CX,5678h
MOV DX,0DEF0h
ADD CX,DX
ADC AX,BX
INT 20h
END Proses
Hasil Debug
Analisa
Program
MOV AX, 1234hànilai 1234h akan disimpan pada variabel
AX
MOV BX, 9ABChànilai 9ABCh akan disimpan pada variabel
BX
MOV CX, 5678hànilai 5678h akan disimpan pada variabel
CX
MOV DX, 0DEF0hànilai 0DEF0h akan disimpan pada variabel
DX
Ketika
perintah ADD CX, DX dijalankan maka
nilai CX akan dijumlahkan dengan nilai DX dan hasilnya adalah 13568 karena
nilainya sudah lebih 16bit maka nilai yang ditampilkan pada variabel CX adalah
3568 sedangkan 1 adalah nilai carry. Dan ketika ADC AX, BX dijalankan maka AX
akan ditambahkan dengan BX dan hasilnya adalah ACF0 kemudian nilai ACF0
ditambah dengan nilai carry di atas yaitu 1 sehingga hasilnya adalah ACF1.
c.
INC
Listing Program
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV
AX,1234h
INC AH
INC AL
INT 20h
END Proses
Hasil Debug
Analisa
Program
Nilai 1234
dimasukkan pada AX, sehingga AH=12 dan AL=34.Fungsi increment pun dikerjakan
pada keduanya secara terpisah. Awalnya INC dikerjakan pada AH sehingga nilainya
berubah menjadi 13, AX=1334. Lalu dikerjakan pada AL, sehingga nilainya berubah
menjadi 35. Hasil akhir AX=1335.
d.
Program
Penambahan dan Debug
Listing
Program
.MODEL
SMALL
.CODE
ORG 100h
Proses :
MOV AH,15h
MOV AL,4
ADD AH,AL
MOV AX,1234h
MOV BX,0F221h
ADD AX,BX
MOV AX,1234h
MOV BX,9ABCh
MOV CX,5678h
MOV DX,0DEF0h
MOV CX,DX
ADC AX,BX
INC AL
INT 20h
END Proses
Hasil Debug
Analisa Program
MOV AH, 15h ànilai 15h disimpan ke variabel AH
MOV AL, 4 ànilai 4 disimpan ke variabel AL
Ktika perintah ADD
AH,AL dilaksanakan, program akan menjumlahkan nilai yang ada pada variabel AH
dengan variabel AL dan hasilnya disimpan pada variabel AH, sehingga hasil
penjumlahananya adalah 19 dan pada variabel AL nilainya tetap 04 karena nilai
tersebut adalah nilai terendah, sehingga hasilnya adalah 1904.
MOV AX, 1234hà nilai 1234h akan disimpan pada variabel
AX
MOV BX, 0F221hà nilai 0F221h akan disimpan pada
variabel BX
Ktika perintah ADD
AX,BX dilaksanakan, program akan menjumlahkan nilai yang ada pada variabel AX
dengan variabel BX dan hasilnya disimpan pada variabel AX, sehingga hasil
penjumlahananya adalah 10455. Karena nilainya sudah lebih 16 bit maka nilai
yang ditampilkan pada variabel AX adalah 0455 sedangkan 1 adalah nilai carry.
MOV AX, 1234hànilai 1234h akan disimpan pada variabel
AX
MOV BX, 9ABChànilai 9ABCh akan disimpan pada variabel
BX
MOV CX, 5678hànilai 5678h akan disimpan pada variabel
CX
MOV DX, 0DEF0hànilai 0DEF0h akan disimpan pada variabel
DX
Ketika perintah ADD
CX, DX dijalankan maka nilai CX akan
dijumlahkan dengan nilai DX dan hasilnya adalah 13568 karena nilainya sudah
lebih 16bit maka nilai yang ditampilkan pada variabel CX adalah 3568 sedangkan
1 adalah nilai carry. Dan ketika ADC AX, BX dijalankan maka AX akan ditambahkan
dengan BX dan hasilnya adalah ACF0 kemudian nilai ACF0 ditambah dengan nilai
carry di atas yaitu 1 sehingga hasilnya adalah ACF1. Kemudian program akan
melanjutkan ke perintah INC AL sehingga nilai pada variabel AX = ACF2
dikarenakan nilai ACF1 ditambah nilai carry yang ada di atas.
2.
Operasi
Pengurangan
a.
SUB
Listing Program
.MODEL
SMALL
.CODE
ORG
100h
Proses
:
MOV AX,15h
MOV BX,12h
SUB AX,BX
SUB AX,AX
INT 20h
END Proses
Hasil Debug
Analisa
Program
MOV
AX, 15hànilai 15h akan
disimpan pada variabel AX
MOV
BX, 12hà nilai 12h akan
disimpan pada variabel BX
SUB
AX, BXànilai AX akan
dikurang dengan nilai BX dan akan disimpan pada variabel AX menghasilkan nilai
0003
SUB
AX, AX à untuk menolkan
register AX dikurang dengan dirinya sendiri
b.
SBB
Listing
Program
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses
ALo EQU 0EFFFh
AHi EQU 122h
BLo EQU 0FFFFh
Bhi EQU 0FEh
HslLo DW ?
HslHi DW ?
Proses :
MOV AX,ALo
;
SUB AX,Blo
;
MOV HslLO,AX
;
MOV AX,AHi
;
SBB AX,BHi
;
MOV
HslHi,AX ;
INT 20h
END TData
Hasil Debug
Analisa Program
Pada saat perintah MOV AX,ALodieksekusimaka program akan
memanggil nilai konstantanya yaitu nilai ALo
= EFFF dan disimpan ke variable AX.
Kemudian program melanjutkan keperintah selanjutnya SUB AX,BLo, program
memanggil terlebih dahulu nilai BLo yaitu
FFFF kemudian program mengurangkan
nilai AX – Blo ( EFFF – FFFF) hasilnya
disimpan ke variable AX. Pada
perintah MOV HslLo, AX nilai AX akan disimpan ke variable HslLo. Pada perintah MOV AX, AHi program juga akan memanggil nilai konstanta
dari AHi dan program akan menyimpan
nilai AHi ke variable AX. Dan pada perintah SBB AX,BHi
program akan memanggil nilai konstanta BHi
terlebih dahulu dan kemudian program baru mengurangkan AX – BHi (122-FE) setalah itu program juga mengurangkan hasil nilai
pengurangan antara AX – BHi dengan Carry (1), sehingga nilai AX diperoleh adalah 0023. Dan nilai AX akan disimpan ke
variable HslHi dengan perintah MOV
HslHi,AX, kemudian program akan meminta keluar dari ekekusi diatas dengan
perintah INT 20h.
c.
DEC
Listing
Program
.MODEL SMALL
.CODE
ORG
100h
Proses :
MOV AH,02h
MOV DL,'Z'
MOV CX,26
Ulang :
INT 21h
DEC DL
LOOP ULANG
INT 20h
END Proses
Hasil
Eksekusi
Analisa
Program
Program ini
hampir sama seperti pada program latihan mencetak 16 karakter, cuma perbedaan
pada pogram ini nilai DL nya dikurang 1.
MOV AH, 02h àNilai servis yang digunakan untuk
mencetak karakter
MOV DL,'Z' à Karakter yang akan dicetak dan disimpan
sementara ke variable DL
MOV CX, 26h à karakter akan diulang sebanyak 26 kali
Ketika CX bernilai 1 maka karakter yang akan dicetak
adalah Z dan nilai DL dikurang 1 kemudian program akan kembali ke perintah di
atas dan nilai DL berubah menjadi dan
karakter Y dicetak ke layar. Begitu juga seterusnya program akan mengulang
samapai CX bernilai 26 sehingga hasil yang dicetak seperti hasil eksekusi di
atas. Ketika nilai CX sudah lebih dari 26 maka program akan keluar.
3.
Operasi
Perkalian
Listing
Program
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses
A DW 01EFh
B DW 02FEh
HslLo DW ?
HslHi DW ?
Proses:
MOV AX,A
MUL B
MOV HslLo,AX
MOV HslHi,DX
INT 20h
END TData
Hasil Eksekusi
Analisa Program
A
DW 01EFh
KONSTANTA
|
HslLo DW ?
HslHi DW ?
Ketika program
pertama dijalankan maka program akan melompat langsung ke perintah MOV AX, A.
Ketika perintah tersebut dieksekusi maka program akan memanggil nilai
konstantana yaitu A = 01EF dan disimpan ke variabel AX, kemudian program
mengalihkan nilai A dengan nilai B sehinnga hasilnya 5C922 karena nilainya
sudah lebih dari 16 bit maka nilai yang disimpan pada variabel AX adalah
C922,sedangkan nilai 5 adalah carrynya dan ketika HsLhi dijalankan maka nilai
carry akan ditampilkan pada variabel DX
4.
Pembagian
Listing
Program
.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses
A DW 01EFh
B DW 2
Hsl DW ?
Sisa DW ?
Proses:
SUB DX,DX
MOV AX,A
DIV B
MOV Hsl,AX
MOV Sisa,DX
INT 20h
END Tdata
Hasil Eksekusi
Analisa Program
A
DW 01EFh
KONSTANTA
|
Hsl DW ?
Sisa DW ?
SUB
DX,DXàmenolkan nilai
DX
Ketika program pertama dijalankan
maka program akan melompat langsung ke perintah MOV AX, A. Ketika perintah tersebut
dieksekusi maka program akan memanggil nilai konstantana yaitu A = 01EF dan
disimpan ke variabel AX dan pada perintah DIV B nilai A dibagi dengan nilai B
dan pada perintah MOV Hsl, AX menampilkan hasil pembagian antara nilai A dan
nilai B yaitu F7 dan pada perintah MOV sisa, DX
nilai DX nya adalah 0001.
3.3.
Manipulasi
Bit dan Logika
1.
Gerbang
NOT
Listing
Program
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AL,3Fh
NOT AL
INT 20h
END Proses
Hasil Debug
Analisa
Program
Nilai 3Fh
dimasukkan ke AX. Nilai bit awal AX disini adalah0011
1111. Lalu dengan menggunakan NOT, nilai 3Fh dinegasikan sehingga bitnya
berubah menjadi 11000000 dengan nilai C0.
2.
Gerbang
AND
Listing
Program
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV
AL,3Fh
MOV
BL,1Ah
AND
AL,BL
INT
20h
END Proses
Hasil Debug
Analisa
Program
Disini,
nilai 3F akan disimpan ke variable AL dan 1A akan disimpan ke variable
BL,ketika perintah AND AL,BL dijalankan maka register AL akan menghasilkan
nilai 1A dikarenakan nilai AL lebih besar daripada nilai BL,seperti pada table
gerbang AND yang mana AL nilai operandnya lebih besar daripada nilai operand
BL.Cermatilah tabel gerbang AND di atas AL diberi nilai 1 kerena nilai AL lebih
besar daripada nilai BL,dan nilai BL adalah 0.Pada table gerbang AND aperand 1
AND 0 = 0.
3.
Gerbang
OR
Listing Program
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AL,3Fh
MOV BL,1Ah
OR AL,BL
INT 20h
END Proses
Hasil Debug
Analisa Program
Disni
nilai 3F akan disimpan ke variable AL dan 1A akan disimpan ke variable BL,
ketika perintah OR AL,BL dijalankan dijalankan maka register AL akan
menghasilkan nilai 3F dikarenakan nilai AL lebih besar daripada nilai
BL,seperti pada table gerbang OR yang mana AL nilai operandnya lebih besar
daripada nilai operand BL.Cermatilah tabel gerbang OR di atas AL diberi nilai 1
kerena nilai AL lebih besar daripada nilai BL,dan nilai BL adalah 0. Pada table
gerbang OR aperand 1 OR 0 = 1.
4.
Gerbang
XOR
Listing
Program
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AX,0A12h
XOR AX,AX
INT 20h
END Proses
Hasil Debug
Analisa
Program
Pada
program di atas ketika perintah MOV AX, 0A12h dijalankan makanilai AX akan
bernilai 0A12h dan ketika perintah XOR AX,AX dijalankan maka register AX akan
menghasilkan nilai 0. Seperti pada table operator XOR di atas apabila kedua
registernya bernilai sama maka akan menghasilkan nilai 0, begitu juga
sebaliknya.
BAB IV
PENUTUP
4.1 Kesimpulan
Setelah kita mempelajari beberapa pembahasan di atas, maka dapat kita
simpulkan sebagai berikut :
·
Bahasa Assembly adalah
bahasa tingkat rendah yang menggunakan nemonic code dalam penulisan kode
programnya.
·
Program debug dapat
digunakan untuk menuliskan isi program assembly.
·
Program debug dijalankan
melalui comment prompt.
·
Pada debug, fungsi r yaitu
untuk menampilkan isi register, dan bila r diikuti dengan nama register, maka
berfungsi untuk memasukkan nilai register tersebut. Fungsi rip yaitu digunakan
untuk menuliskan program dalam debug. Dan fungsi t yaitu untuk mentrace suatu
program.
·
MOV digunakan untuk mengcopykan
nilai ke dalam register.
·
ADD digunakan untuk
menambahkan nilai ke dalam suatu register dengan operandnya sedangkan fungsi
SUB kebalikan dari ADD.
·
INC digunakan untuk
increment dan DEC digunakan untuk decrement.
4.2 Saran
Penulis menyadari bahwa penulisan laporan ini
belumlah sempurna masih banyak terdapat kesalahan dan kekurangan, maka untuk
itu penulis mengharapkan kepada segenap pihak untuk memberikan kritik dan saran
yang bersifat konstruktif demi kesempurnaan laporan ini agar kita semua menjadi
mahasiswa yang berintelektual tinggi, Amiiiin…!!!!
DAFTAR
PUSTAKA
Fadlisyah,S.Si. Bahasa Rakitan.Yogyakarta:Andi.
S’to.2001.Pemrograman Dengan Bahasa
Assembly Edisi Online Versi 1.0 : http://www.jasakom.com
Tidak ada komentar:
Posting Komentar