Jumat, 14 September 2012

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.
Pada bahasa assembly ini sudah tidak mengenal hanya 0 dan 1 lagi, namun ada beberapa symbol yang digunakan antara lain :MOV, ADD ( untuk penjumlahan ),SUB ( untuk pengurangan ),MUL ( untuk perkalian),dan lain-lain.Pada bahasa assembly mempunyai program untuk debugging yaitu untuk mencari kesalahan pada sebuah program yang dibuat. Pada bahasa mesin tidak mempunya debugger. Contohnya adalah Turbo Assembler yang akan mencocokkan token dari awal sampai akhir dan dikodekan menjadi bahasa mesin.
Kelebihan Bahasa Assembly: Ketika di-compile lebih kecil ukuran, Lebih efisien/hemat memori,Lebih cepat dieksekusi
Kesulitan Bahasa Assembly: Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi, Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak, Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis.


1.2 Tujuan Pratikum
1. Mengenal dan memahami fungsi dasar dalam Bahasa Assembly.
2. Mengerti dan memahami jalannya program Bahasa Assembly.
3. Dapat menggunakan fungsi-fungsi dasar pemrograman Assembly.



1.3  Manfaat Pratikum
1. Dapat menambah wawasan dan ilmu tentang bahasa pemrograman bahasa
    Assembly.
2. Dapat mengenal sintaks-sintak bahasa Assembly.
3. Dapat mempelajari dasar-dasar bahasa Assembly.




























BAB II
TEORI BAHASA

2.1  Assembly Dan Eksekusi Program
Source program yang ditulis dalam bahasa assembly harus diassemble menjadi object program bahasa mesin sebelum dapat dieksekusi. Hal ini dilakukan oleh program assembler, yang mengganti semua simbol untuk mode operasi dan penggalamatan dengan kode biner yang digunakaa dalam instruksi mesin, dan mengganti semua nama dan label dengan nilai sebenarnya.
Assembler menetapkan alamat untuk instruksi dan blok data, mulai dari alamat yang ada dalam asembler directive ORIGIN. Juga menyisipkan konstanta yang dapat dinyatakan dalam perintah DATAWORD dan ruang memori cadangan sebagaimana yang diminta oleh perintah RESERVE. Bagian utama proses assembly menetapkan nilainilai untuk menggantikan namanama tersebut. Pada beberapa kasus, dimana nilai suatu nama ditetapkan oleh directive EQU, maka ini merupakan tugas langsung. Pada kasus lain, dimana suatu nama didefinisikan dalam field Label suatu instruksi, maka nilai yang diwakili nama ini ditentukan dengan lokasi instruksi ini dalam object program terassemble. Karenanya, assembler barns mencatat alamatalamat yang menghasilkan kode mesin untuk instruksi yang berurutan. Misalnya, nama START dan LOOP masingmasing akan menetapkan nilai 100 dan 112.

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.3 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.4 .CODE
      .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.5  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.6 JMP
      Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah:
Tujuan JUMP: 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.7  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.8 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.9 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.10 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 nilai pada 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.11 Operasi Aritmatika
2.11.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.11.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.11.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 bit seperti 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.11.4 Operasi 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.






















BAB III
HASIL PERCOBAAN

3.1 Pernyataan Mencetak Huruf
Listing Program

Hasil Eksekusi Keterangan : Nilai servis 02h dimasukkan kedalam AH melalui perintah MOV, kemudian huruf A dicetak ke dalam DL. Fungsi DOS lalu dikerjakan melalui interupsi 021h.

3.2 Pernyataan Mencetak Karakter Beserta Atribut
Listing Program

Hasil Eksekusi Keterangan : Program untuk memunculkan nilai A sebanyak tiga kali.



3.3 Mencetak Beberapa Karakter Dengan  Pengulangan  Loop
LISTING PROGRAM :
Hasil Eksekusi
Keterangan : Nilai servis yang digunakan kali ini adalah 02h. Lalu dicetaklah huruf mulai dari huruf yang paling awal yaitu A. Kemudian nilai perulangan 10h dimasukkan sehingga hurufnya nantinya akan keluar 10 kali. Dengan menggunakan loop pada fungsi ulang, lalu huruf selanjutnya sampai huruf ke-10 pun dicetak dengan menggunakan fungsi INC sehingga setelah A muncul huruf B, lalu C sampai akhirnya didapatkan hasil akhir diatas.

3.4 Operasi Penambahan Dengan ADD

LISTING PROGRAM :
Hasil Eksekusi
Keterangan :
Pertama, nilai 15h dimasukkan ke AH, lalu 4 dimasukkan ke AL. Jadi, AX=1504. Kemudian nilai AL ditambahkan ke AH sehingga nilai AH menjadi 19. Akhirnya nilai AX =1904. Nilai yang ditambahkan disini hanya AH sehingga yang berubah hanya AH, bukan AL yang tetap bernilai 4 karena tujuannya adalah AH.

3.5 Operasi Penambahan Dengan ADC
                                
LISTING PROGRAM :

Hasil Eksekusi
Hasil Eksekusi
Pada awalnya, nilai 1234 dimasukkan ke AX, 9ABC ke BX, 5678 ke CX dan DEF0 ke DX. Nilai DX ditambahkan ke CX, jadi CX=3568 dengan nilai CF=1. Lalu nilai BX ditambahkan ke AX dengan menggunakan perintah ADC, hasilnya AX=ACF1. Dapat dilihat bahwa carry flagnya juga 1. Kemudian, hasil akhirnya disini yang ditampung pada AX:CX adalah ACF13568h.

3.6 Operasi Penambahan Dengan INC

LISTING PROGRAM :
Hasil Eksekusi
Keterangan: 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.

3.7 Program Penambahan dan Debug
LISTING PROGRAM :










Hasil Eksekusi
Keterangan:
Awalnya 15h dimasukkan ke AH, 4 ke AL. Lalu AL ditambahkan AH, sehingga AX=1904. Kemudian AX dimasukkan 1234H, BX=0F221h. BX pun dimasukkan ke AX jadi AX=0455. Selanjutnya 1234 dimasukkan ke AX lagi dan BX=9ABCh, 5678h dimasukkan ke CX, DX=0DEF0h. Nilai CX lalu diganti dengan nilai DX sehingga nilai keduanya sama. Dengan menggunakan ADC kemudian BX ditambahkan AX sehingga AX=ACF1. Terakhir dengan menggunakan INC nilai Carry flagnya berubah menjadi 2 sehingga AX=ACF2.


3.8 Program Operasi Pengurangan Dengan SUB dan SBB

LISTING PROGRAM :
Hasil Eksekusi Keterangan : Nilai awal yang dimasukkan AX= 15h, BX=12h. Lalu AX-BX= 003h dengan menggunakan perintah SUB. Terakhir AX dikurangi lagi dengan AX sehingga nilainya menjadi nol.
Pada TData, program melompat ke proses sementara dibawahnya sudah didefinisikan beberapa data yang konstan dengan menggunakan perintah EQU. Disini didefinisikan bahwa nilai ALo =0EFFFh, AHi=122h, BLo=0FFFFh,BHi=0FEh tidak dapat dirubah. Hasil pengurangan nanti ditampung pada HslLo dan HslHi yang masing masing bernilai 1 word(DW). Tanda ‘?’ digunakan untuk menyatakan bahwa dalam variabel ini tidak diberikan data awal.
Lalu pada Proses, program memasukkan nilai ALo ke dalam AX , lalu menguranginya dengan nilai BLo sehingga bisa dilihat pada hasil debug, nilai AX berubah menjadi F000 kemudian nilai AX tadi disimpan di dalam HslLo. Pada akhir tahap ini nilai HslHi:HslLo masih 0000F000 .
 Langkah berikutnya adalah mencari nilai word tingginya. Pada perintah MOV AX,AHi nilai 122h dimasukkan ke AX dengan menggunakan SBB nilai tsb itu dikurangi dengan BHi yang bernilai 0FEh, sehingga hasilnya adalah 0023 yang dapat dilihat pada nilai AX yang berubah. Jadi didapat nilai akhirnya yang tersimpan pada pasangan HslHi:HslLo berupa 0023F000. Pada AX, yang ditampilkan disini hanya 0023 karena nilai word tingginya ditampilkan lebih awal.


3.9 Program Pengurangan Dengan DEC
LISTING PROGRAM :




Hasil Eksekusi
Keterangan: Perbedaannya terletak pada huruf awal yang dimasukkan yaitu Z dan jumlah huruf yang ankan dicetak yaitu 26. Selanjutnya pada fungsi ULANG digunakan DEC pada nilai DL yang dimasukkan yaitu ‘Z’. Jadi huruf dicetak dengan urutan mundur, awalnya ‘Z’ kemudian ‘Y’ lalu ‘X’ sampai selesai.

3.10 Program untuk Perkalian
LISTING PROGRAM :      
Hasil Eksekusi
Keterangan: 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 bit
seperti MUL BX maka komputer akan mengambil nilai yang terdapat pada BX dan nilai pada AX untuk dikalikan.
3.11 Program dengan Pembagian

LISTING PROGRAM :











Hasil Eksekusi
Keterangan:  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.




























BAB  IV
ANALISA HASIL PERCOBAAN
.MODEL SMALL
Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan oleh program kita.
.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.
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.
JMP
Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP
INT 20h
Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada Dos.
ADD : ini akan menambahkan nilai pada Tujuan dan Asal.
ADC : tempat menampung hasil pertambahan Tujuan dan Asal ditambah lagi dengan carry flag (Tujuan:=Tujuan+Asal+Carry).
INC : Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1.
SUB :  akan mengurangkan nilai pada Tujuan dengan Asal.
SBB :  akan mengurangkan nilai Tujuan dengan Asal dengan cara yang sama seperti perintah DEC : digunakan khusus untuk pengurangan dengan 1.


BAB V
PENUTUP

5.1 Kesimpulan
         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
Kelebihan Bahasa Assembly: Ketika di-compile lebih kecil ukuran, Lebih efisien/hemat memori,Lebih cepat dieksekusi
Kesulitan Bahasa Assembly: Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi, Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak, Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis











DAFTAR PUSTAKA

S’to.2001. Pemrograman Dengan Bahasa Assembly Edisi Online Versi 1.0 : http://www.jasakom.com
Fadlisyah,S.Si. Bahasa Rakitan.Yogyakarta:Andi.

3 komentar: