Minggu, 09 September 2012

Dasar-Dasar Bahasa Assembly


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).
            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
            B DW 02FEh              
            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
            B DW 2                                              
            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