Pengenalan Assembly
Penulis : oh_gayo
Press : ISD
Tahun : 2003
################################################
-------------------------------------------
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).
2. Mengapa Assembly?
----------------------
Assembly memiliki kelebihan yang tidak dapat digantikan oleh bahasa pemrogaman
manapun. Diantaranya adalah :
-----------------------------------
Segment dan Offset merupakan suatu angka 16 bit (direpresntasikan dalam bilangan
hexa) yang menunjukkan suatu alamat tertentu di memory komputer. Pasangan segment :
offset ini disebut juga alamat relatif. Selain alamat relatif, terdapat juga alamat
mutlak berupa angka 20 bit (juga direpresentasikan dalam bilangan hexa). Alamat
mutlak ini dapat dihitung dengan mengalikan segment dengan 10 hexa dan ditambahkan
dengan offset.
0100 : 1234
--------------------------
Interrupt adalah permintaan kepada microprocessor untuk melakukan suatu perintah.
Ketika terjadi permintaan interupsi, microprocessor akan mengeksekusi interrupt
handler , yaitu suatu program yang melayani interupsi. Setitap interrupt handler
itu memiliki alamat masing - masing yang disimpan dalam bentuk array yang masing -
masing terdiri dari 4 byte (2 offset dan 2 segment). Array ini disebut vektor
interupsi . Vektor interupsi ini disusun berdasarkan nomor interupsi yaitu dari
hexa. Selain itu, dikenal juga istilah service dan subservice, maksudnya adalah
bahwa setiap interrupt itu dibagi menjadi beberapa bagian yang mempunyai tugas
masing - masing. Tetapi ada juga interrupt yang tidak memiliki service, contohnya
int 29.
-------------------------
Register untuk menunjukkan alamat dari suatu segment. Yang termasuk register
segment :
. CS (Code Segment)
. DS (Data Segment)
. SS (Stack Segment)
. ES (Extra Segment)
2. Pointer dan Index Register (16 bit) Register untuk menunjukkan alamat dari suatu
offset.
. SP (Stack Pointer)
. BP (Base Pointer)
. SI (Source Index)
Register ini dapat digunakan untuk berbagai keperluan, tetapi masing - masing juga
memiliki fungsi khusus. Jenis register ini memiliki ciri khas, yaitu dapat dibagi
lagi menjadi register 8 bit, register tinggi/high, dan register rendah/low.
Hanya terdiri dari 1 register yaitu IP yang berpasangan dengan reguster CS (CS :
IP) untuk menunjukkan alamat instruksi selanjutnya yang akan dieksekusi.
Register ini berfungsi untuk menunjukkan suatu kondisi (ya atau tidak).
. DF (Direction Flag) 1 jika alur proses alur proses menurun pada string
---------------------------------
Bahasa assembly tidak seperti bahasa tingkat tinggi (High Level Language) yang
biasanya memiliki IDE - Integrated Development Environment, bahasa assembly dapat
diketikkan dalam berbagai macam editor teks, misalnya BC, TC, TURBO, NOTEPAD, EDIT,
dan editor teks lainnya. Yang perlu diingat bahwa ekstensi dari program assembly
haruslah .ASM. Setelah program assembly diketikkan dan disimpan dengan
ekstensi .ASM, maka program tersebut harus dikompilasi menjadi Object File
berekstensi .OBJ, dan kemudian harus dilink menjadi executable file (.EXE/.COM),
executable file inilah yang baru dapat dijalankan.
------------------------------------
-------------------------------------
Untuk .COM dan .EXE memiliki struktur program yang berbeda, untuk kesempatan ini
hanya akan dibahas struktur program .COM.
end label_pertama ; Label yang paling pertama harus ditutup dengan perintah ini
--------------------------------------
----------------------------
INT
---
MOV
---
mOV adalah perintah untuk mengisi nilai ke register, variabel, atau alamat memory
tertentu.
JMP
---
LEA
---
11. Tambahan
--------------
Beberapa hal penting yang perlu diingat :
. Bagian deklarasi variabel tidak boleh dijalankan, harus dilewati dengan melakukan
lompatan ke label setelahnya.
. Semua perintah assembly yang membutuhkan 2 operand seperti MOV memiliki syarat
sebagai berikut :
Contoh :
Contoh :
. Untuk intterupt, ingatlah bahwa setiap interrupt memiliki syarat - syarat sebelum
dipanggil. Penuhi syarat - syarat itu sebelum melakukan intterupt.
------------------------------
Program berikut ini akan membersihkan layar, kemudian akan muncul sebuah kalimat
dan akan diminta untuk memasukkan sebuah karakter. Kemudian akan ditampilkan lagi
sebuah kalimat diikuti dengan karakter yang tadi dimasukkan. code segment
assume cs : code
org 100h
mov al,3h
int 10h
mov ah,9h
lea dx,kal1
int 21h
12mov ah,1h
int 21h
mov kar,al
mov ah,9h
lea dx,kal2
int 21h
mov al,kar
int 29h
mov ah,4ch
int 21h
code ends
end begin
Simpanlah program diatas dengan ekstensi .asm (misal test.asm), kemudian compile
program tersebut dengan perintah :
tasm
Maka akan dihasilkan sebuah object file berekstensi .obj, kemudian link file
tersebut dengan perintah :
tlink /t
- Perhatikan baris begin : jmp start, karena baris berikutnya adalah deklarasi
variabel, maka harus dilewati dengan perintah jmp start (melompat ke label start).
- Pada baris kal1 db 'Mas..... $' disini kita mendeklarasikan sebuah variabel untuk
pencetakan string, ingatlah selalu untuk menambahkan tanda '$' diakhir sebuah
string.
- Pada baris kal2 db 10,13,'... $' sama seperti baris sebelumnya, tetapi disini
kita menambahkan 2 karakter, karakter 10 untuk turun baris, karakter 13 untuk
memindahkan kursor ke awal baris.
- Pada barus start : mov ah,0 sampai baris int 10h, disini kita melakukan interupsi
10h service 0h, yaitu untuk mengganti modus layar, al berisi 3 berarti modusnya
adalah teks 80 x 25. Efek yang terjadi adalah layar akan bersih.
- Pada baris mov ah,9 sampai baris int 21h (2 baris dibawahnya), kita melakukan int
21h service 9h, yaitu untuk mencetak sebuah string. Register dx harus berisi alamat
dari string yang akan dicetak.
- Pada baris mov ah,1h sampai baris mov kar,al, kita menggunakan int 21h service
01h, yaitu untuk meminta input 1 karakter dan ditampilkan ke layar. Karakter yang
diinput akan berada pada register al setelah interupsi dilakukan, maka kita isikan
ke variabel kar dengan perintah mov kar,al
- Selanjutnya pada baris mov al,kar dan int 29h, kita menggunakan int 29h yang
tidak memiliki service, fungsinya untuk mencetak 1 karakter yang ada pada register
al.
semoga kita semua bisa belajar jadi pintar! dan pelajaran kecil ini..
Posting by : oh_gayo
ISD - 2003