W E L C O M E


TOMY RENDHY


"" S E L A M A T D A T A N G D I B L O G I N I ""


penulisan      program menggunakan assembly


BAB V
MEMULAI DENGAN ASSEMBLY

5.1. TEXT EDITOR

 Untuk menuliskan source file untuk program assembly bisa anda gunakan
berbagai editor, misalkan SideKick, WordStar dan Word Perfect. Source file
yang diketikkan harus berupa file ASCII, file ini bisa anda hasilkan melalui
WordStar dengan file 'NON DOCUMEN', atau dengan SideKick. 
 Untuk meyakinkan bahwa source file yang anda  buat adalah file ASCII,
bisa anda coba ketikkan perintah Type pada A>. Bila file yang terlihat dengan
perintah type sama persis dengan yang anda ketikkan pada editor, tanpa
tambahan karakter-karakter yang acak, maka file tersebut adalah file ASCII.
Source file untuk assembly harus berektensi .ASM.

5.2. COMPILER

 Source file ASCII yang telah anda ketikkan perlu dicompile kebentuk file
object dengan extensi .OBJ, dari file object inilah nantinya dapat dijadikan
kebentuk file .EXE atau .COM.
 Untuk mengcompile source file, misalnya file COBA.ASM menjadi file
object dengan extensi .OBJ bisa anda gunakan file TASM.EXE dengan mengetikkan:

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



5.3. LINGKING

 File object yang telah terbentuk dengan TASM, belum dapat dieksekusi
secara langsung. Untuk membuat file object ke bentuk file yang dapat
dieksekusi(ektensi .COM atau .EXE) bisa anda gunakan file TLINK.EXE. 
 Bila source program yang anda buat dalam bentuk EXE maka untuk membentuk
 20

file dengan ektensi EXE bisa anda ketikkan :
    
C:\>tlink coba
Turbo Link  Version 3.0 Copyright (c) 1987,
1990 Borland International


 Bila source program yang dibuat adalah file COM, maka bisa anda
ketikkan:

C:\>tlink/t coba
Turbo Link  Version 3.0 Copyright (c) 1987,
1990 Borland International




5.4. PERBEDAAN PROGRAM COM DAN EXE

 Program dengan ektensi COM dan EXE mempunya berbagai perbedaan yang
menyolok, antara lain :

PROGRAM COM :
 - Lebih pendek dari file EXE
               - Lebih cepat dibanding file EXE
                   - Hanya dapat menggunakan 1 segmen
                   - Ukuran file maksimum 64 KB (ukuran satu
                     segment)
                   - sulit untuk mengakses data atau procedure 
                     yang terletak pada segment yang lain.
                   - 100h byte pertama merupakan PSP(Program
                     Segment Prefix) dari program tersebut.
                   - Bisa dibuat dengan DEBUG

PROGRAM EXE :
 - Lebih panjang dari file COM
                   - Lebih lambat dibanding file COM
                   - Bisa menggunakan lebih dari 1 segmen
                   - Ukuran file tak terbatas sesuai dengan
                     ukuran memory. 
                   - mudah mengakses data atau procedure pada 
                     segment yang lain.
                   - Tidak bisa dibuat dengan DEBUG


5.5. BENTUK ANGKA

 Assembler mengizinkan penggunaan beberapa bentuk angka , yaitu :

1. DESIMAL

 Untuk menuliskan angka dalam bentuk desimal, bisa digunakan tanda 'D'
pada akhir angka tersebut atau bisa juga tidak diberi tanda sama sekali,
contoh : 298
D
 atau 298 saja.

 21

2. BINER

 Untuk menuliskan angka dalam bentuk biner(0..1), harus ditambahkan tanda
'B' pada akhir angka tersebut, contoh : 01100111
B
.

3. HEXADESIMAL

 Untuk menuliskan angka dalam bentuk hexadesimal(0..9,A..F), harus
ditambahkan tanda 'H' pada akhir angka tersebut. Perlu diperhatikan bahwa bila
angka pertama dari hexa berupa karakter(A..F) maka angka nol harus ditambahkan
didepannya. Bila hal ini tidak dilakukan, assembler akan menganggapnya sebagai
suatu label, bukannya sebagai nilai hexa. Contoh penulisan yang benar:
0
A12
H
,
2A02
H
.

4. KARAKTER

 Penulisan karakter atau string diapit oleh tanda petik dua (
"
)  atau
tanda petik satu(
'
), Contoh:
'
 Ini adalah karakter
'
.

5.6. LABEL

 Label bisa anda definisikan dengan ketentuan akhir dari nama label
tersebut harus berupa tanda titik dua (
:
). Pemberian nama label bisa
digunakan:

- Huruf : A..Z (Huruf besar dan kecil tidak dibedakan)
- Angka : 0..9
- 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.                 

5.7. KOMENTAR

 Untuk memberikan komentar pada source file digunakan tanda '
;
'. Apapun
yang dtuliskan dibelakang tanda '
;
' akan dianggap sebagai komentar, Contoh :
mulai: MOV BX,7 
; berikan nilai 7 pada BX


5.8. PERINTAH MOV

 Perintah MOV digunakan untuk mengcopy nilai atau angka menuju suatu
register,variabel atau memory. Adapun syntax untuk perintah MOV ini adalah :

MOV Tujuan,Asal


Sebagai contohnya : 
MOV AL,9  ; masukkan nilai 9 pada AL.
                     MOV AH,AL ; nilai AL=9 dan AH=9 
                     MOV AX,9  ; AX=AH+AL hingga AH=0 dan AL:=9


 Pada baris pertama(
MOV AL,9
), kita memberikan nilai 9 pada register AL.
Kemudian pada baris kedua(
MOV AH,AL
) kita mengcopykan nilai register AL untuk
AH. Jadi setelah operasi ini register AL akan tetap bernilai 9, dan register
 22

AH akan sama nilainya dengan AL atau 9. Pada baris ketiga(
MOV AX,9
), kita
memberikan register AX nilai 9. Karena AX terdiri atas AH dan AL, maka
register AH akan bernilai 0, sedangkan AL akan bernilai 9.
 Perintah MOV akan mengcopykan nilai pada sumber untuk dimasukan ke
Tujuan, nilai sumber tidaklah berubah. Inilah sebabnya MOV(E) akan kita
terjemahkan disini dengan mengcopy, dan bukannya memindahkan.

5.9. PERINTAH INT

 Didalam pemrograman assambler, kita akan banyak sekali menggunakan
interupsi untuk membantu kita dalam mengerjakan suatu pekerjaan. Untuk
menghasilkan suatu interupsi digunakan perintah INT dengan syntax:
INT
 NoInt  
 Dengan NoInt adalah nomor interupsi yang ingin dihasilkan. Sebagai
contohnya bila kita ingin menghasilkan interupsi 21h, bisa dituliskan dengan:
INT 21h
, maka interupsi 21h akan segera terjadi.

 23

BAB VI
MEMBUAT PROGRAM COM

6.1. MODEL 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
  -----------------------------------------------------------
Gambar 6.1. Model Program COM



 Supaya lebih jelas bentuk dari program ideal, marilah kita telusuri
lebih lanjut dari bentuk program ini.

6.1.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. 
 24

- 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.

6.1.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.

6.1.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.

6.1.4. JMP

 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.

6.1.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.

 25

BAB 7
MENCETAK HURUF

7.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. 

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
;   PROGRAM : A0.ASM            ;
;   FUNGSI  : MENCETAK KARATER  ;
;             'A' DENGAN INT 21 ;

;==========================S’to=;

         .MODEL SMALL
         .CODE
         ORG 100h
Proses : 
         MOV  AH,02h   ; Nilai servis ntuk mencetak karakter
         MOV  DL,'A'   ; DL = Karakter ASCII yang akan dicetak
         INT  21h      ; Cetak karakter !!

         INT  20h      ; Selesai ! kembali ke DOS
END      Proses


         Program 7.1. Mencetak sebuah karakter


 Setelah program 7.1. anda ketik compile-lah dengan menggunakan TASM.EXE
dengan perintah :

   C:\>tasm a0
   Turbo Assembler  Version 2.0  Copyright (c) 1988, 1990
   Borland International

   Assembling file:   a0.ASM 
   Error messages:    None
   Warning messages:  None
   Passes:            1
   Remaining memory:  306k

   C:\>dir a0.*

   Volume in drive C is S’to
   Directory of C:\

   A0       ASM           506 08-14-94   3:56p
   A0       OBJ           179 08-14-94  11:24p
        2 file(s)            685 bytes
 26

                       1,267,200 bytes free


 Sampai disini sudah dihasilkan suatu file object dari KAL.ASM yang siap
dijadikan file COM(karena kita membuat file dengan format program COM). Untuk
itu lakukanlah langkah kedua, dengan perintah :

   C:\>tlink/t a0
   Turbo Link  Version 3.0 Copyright (c) 1987, 1990
   Borland International

   C:\>tlink/t a0
   Turbo Link  Version 3.0 Copyright (c) 1987, 1990
   Borland International

   C:\>dir a0.*

   Volume in drive C is S’to
   Directory of C:\

   A0       ASM           506 08-14-94   3:56p
   A0       OBJ           179 08-14-94  11:26p
   A0       MAP           229 08-14-94  11:26p
   A0       COM             8 08-14-94  11:26p
           4 file(s)            922 bytes
                          1,266,176 bytes free


  Setelah kedua proses itu selesai maka dihasilkanlah suatu program COM
yang sudah siap untuk dijalankan. File-file yang tidak digunakan bisa anda
hapus. Bila program 7.1.  dijalankan maka pada layar akan ditampilkan 


C:\>A0  
   A

 Kita lihat disini bahwa karakter yang tercetak adalah yang sesuai dengan
kode ASCII yang ada pada register DL. Sebagai latihan cobalah anda ubah
register DL dengan angka 65 yang merupakan kode ASCII karakter 'A'. Hasil yang
didapatkan adalah sama. 

Pelajarilah
 fungsi ini baik-baik, karena akan banyak kita gunakan pada
bab-bab selanjutnya.

7.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.           
 27

        
;=================================;
;   PROGRAM : A1.ASM              ;
;   FUNGSI  : MENCETAK KARATER 'A';
;             BESERTA ATRIBUTNYA  ;
;             DENGAN INT 10h      ;
;============================S’to=;

         .MODEL SMALL
         .CODE
         ORG 100h
Proses : 
         MOV  AH,09h    ; Nilai servis untuk mencetak karakter
         MOV  AL,'A'    ; AL = Karakter yang akan dicetak
         MOV  BH,00h    ; Nomor Halaman layar
         MOV  BL,93h    ; Warna atau atribut dari karakter
         MOV  CX,03h    ; Banyaknya karakter yang ingin dicetak
         INT  10h       ; Laksanakan !!!

         INT  20h       ; Selesai ! kembali ke DOS
END      Proses

Program 7.2. Mencetak karakter beserta atributnya



 Bila program 7.2. dieksekusi maka akan ditampilkan huruf 'A' sebanyak 3
kali dengan warna dasar biru kedip dan warna tulisan Cyan(sesuai dengan nilai
register BL). Mengenai halaman layar dan atribut(warna) akan kita bahas lebih
lanjut pada bagian yang lain.
  B:\>A1
  AAA

 Anda bisa merubah-rubah register AL dan BL untuk merubah karakter dan
warna yang ingin dicetak. 

7.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 nilai
 28

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 
  

7.4. MENCETAK BEBERAPA KARAKTER

 Untuk mencetak beberapa karakter, bisa anda gunakan proses looping.
Sebagai contoh dari penggunaan looping ini bisa dilihat pada program 7.3.

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
;   PROGRAM : ABC0.ASM          ;
;   FUNGSI  : MENCETAK 16 BUAH  ;
;             KARAKTER  DENGAN  ;
;             INT 21h SERVIS 02 ;
;==========================S’to=;

         .MODEL SMALL
         .CODE
         ORG 100h
Proses : 
         MOV  AH,02h   ; Nilai servis
         MOV  DL,'A'   ; DL=karakter 'A' atau DL=41h
         MOV  CX,10h   ; Banyaknya pengulangan yang akan 
 Ulang : 
         INT  21h      ; Cetak karakter !!
         INC  DL       ; Tambah DL dengan 1
         LOOP Ulang    ; Lompat ke Ulang

         INT  20h
END      Proses

Program 7.3. Pengulangan dengan perintah LOOP




 Bila program 7.3. dijalankan maka akan ditampilkan :

       
ABCDEFGHIJKLMNOP



Tidak ada komentar:

Silahkan pilih Emoticons yang tersedia.
:a: :b: :c: :d: :e: :f: :g: :h: :i: :j: :k: :l: :m: :n: :o: :p: :q: :r:
:s: :t: :u: :v: :w: :x: :y:

Posting Komentar