Anda di halaman 1dari 8

1. Apakah Sebenarnya Bahasa Assembly itu?

——————————————-
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 :
– Hasil program memiliki tingkat kecepatan yang tinggi.
– Ukuran dari program kecil.
– Sangat mudah untuk mengakses Sistem Komputer.

3. Apakah Segment dan Offset itu?


———————————–
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.
Contoh : segment : offset
0100 : 1234
Alamat relatifnya adalah : 02234

4. Apakah Interrupt itu?


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

5. Apakah Register itu?


————————-
Register adalah merupakan sebagian memory dari microprocessor yang neniliki kecepatan
sangat tinggi. Dapat juga dianalogikan bahwa register merupakan kaki tangan dari
microprocessor.

Register dibagi menjadi lima bagian besar yaitu :


1. Segment Register (16 bit)
Register untuk menunjukkan alamat dari suatu segment. Yang termasuk register segment :
. CS (Code Segment)
Menunjukkan alamat segment dari program yang sedang aktif.
. DS (Data Segment)
Menunjukkan alamat segment dari data program (variabel).
. SS (Stack Segment)
Menunjukkan alamat segment dari stack yang digunakan program.
. ES (Extra Segment)
Merupakan register segment cadangan.

2. Pointer dan Index Register (16 bit) Register untuk menunjukkan alamat dari suatu offset.
Yang termasuk register pointer dan index :
. SP (Stack Pointer)
Berpasangan dengan SS (SS : SP).
. BP (Base Pointer)
Berpasangan dengan SS (SS : BP).
. DI (Destination Index)
Berpasangan dengan ES (ES : DI). Dipakai untuk operasi string.
. SI (Source Index)
Berpasangna dengan DS (DS : SI). Dipakai untuk operasi string.

3. General Purpose Register (16 bit)


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.
Yang termasuk register general purpose :
. AX –> AH|AL (Accumulator)
Untuk menangani operasi arithmatika.
. BX –> BH|BL (Base)
Untuk menunjukkan alamat offset.
. CX –> CH|CL (Counter)
Untuk looping, menunjukkan berapa kali looping terjadi.
. DX –> DH|DL (Data)
Untuk menampung sisa pembagian bilangan 16 bit.

4. Index Pointer Register (16 bit)


Hanya terdiri dari 1 register yaitu IP yang berpasangan dengan reguster CS (CS : IP) untuk
menunjukkan alamat instruksi selanjutnya yang akan dieksekusi.

0125. Flags Register (1 bit)


Register ini berfungsi untuk menunjukkan suatu kondisi (ya atau tidak).
Register ini hanya bernilai 0 dan 1.
Yang termasuk register flags :
. OF (Overflow Flag) 1 jika terjadi overflow
. SF (Sign Flag) 1 jika digunakan bilangan bertanda
. ZF (Zero Flag) 1 jika hasil operasi bernilai 0
. CF (Carry Flag) 1 jika operasi menghasilkan carry
. PF (Parity Flag) 1 jika hasil operasi bilangan genap
. DF (Direction Flag) 1 jika alur proses alur proses menurun pada string
. IF (Interrupt Flag) 1 jika proses dapat diinterupsi
. TF (Trap Flag) 1 jika dapat ditrace / debug
. AF (Auxiliary Flag) digunakan pada operasi bilangan BCD
. NT (Nested Task) digunakan untuk menangani interupsi beruntun
. IOPL (I/O Protection Level) digunakan untuk mode proteksi (2 bit)
6. Bagaimana memulai Assembly?
———————————
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 mengcompile : C:\TASM


Untuk melink : C:\LINK
C:\Option /t untuk melink file ke .COM
C:\Untuk melink menjadi .EXE, hilangkan option /t ini.
atau pake cara langsung :

7. Apakah Perbedaan .COM dan .EXE?


————————————
Perbedaan program .COM dan .EXE adalah :
Program .COM Program .EXE
– Hanya menggunakan 1 segment untuk º – Menggunakan banyak segment.
– code, data, dan stack. º
– Ukuran program relatif kecil º – Ukuran program relatif besar
– Hasil program lebih cepat º – Hasil program lebih lambat
– Hanya dapat menangani program kecil º – Dapat menangani program yang besar(<=64
KByte). 8. Bagaimana Struktur Program .COM? ————————————- Untuk .COM
dan .EXE memiliki struktur program yang berbeda, untuk kesempatan ini hanya akan dibahas
struktur program .COM. Berikut ini struktur program .COM (tanda ; adalah untuk
komentar) : nama_segment segment ; nama_segment diisi terserah anda ; Baris ini untuk
memberikan nama sebuah segment assume cs : nama_segment ; Menunjukkan CS ke
segment yang sudah kita beri nama org 100h ; Untuk PSP – Program Segment Prefix ; PSP
ini digunakan untuk berhubungan dengan DOS label_pertama : ; Di Assembly, minimal harus
ada satu label, ; penamaan label terserah anda mov ah,04ch ; service int 21h ; int 21h service
04ch merupakan instruksi untuk ; keluar dari program nama_segment ends ; Akhir dari
sebuah segment end label_pertama ; Label yang paling pertama harus ditutup dengan perintah
ini 9. Bagaimana Variabel dalam Assembly? ————————————– Dalam assembly
dikenal beberapa jenis data, yaitu : – db (define byte) –> Besarnya 1 byte (0h – FFh)
– dw (define word) –> Besarnya 2 byte (0h – FFFFh)
– dd (define double word) –> Besarnya 4 byte (0h – FFFFFFFFh)
– df (define far word) –> Besarnya 6 byte (0h – FFFFFFFFFFFFh)
– dq (define quad word) –> Besarnya 8 byte (0h – FFFFFFFFFFFFFFFFh)
– dt (define temp word) –> Besarnya 10 byte (0h – FFFFFFFFFFFFFFFFFFFFh)

10. INT, MOV, JMP, dan LEA


—————————-
INT

INT adalah perintah untuk melaksanakan suatu interupsi.
Syntaxnya adalah : INT no_interupsi
Contoh : INT 20h ; untuk program terminate
MOV

mOV adalah perintah untuk mengisi nilai ke register, variabel, atau alamat memory tertentu.
Syntaxnya adalah :MOV destination,source
Contoh : MOV AX,5 ; nilai AX akan berisi 5

JMP

JMP adalah perintah untuk melakukan lomptan ke label tertentu.
Syntaxnya adalah : JMP nama_label
Contoh : JMP label1 ; Program akan melompat ke label1

LEA

LEA adalah perintah untuk mendapatkan alamat dari sebuah variabel.
Syntaxnya adalah : LEA variabel
Contoh : lea si,bil1 ; si akan berisi offset bil1

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 :
– Kedua operand besarnya harus sama.
Contoh : MOV ax,bl ; ini salah karena AX 16 bit dan bl 8 bit
MOV al,bl ; ini benar, AL dan BL besarnya 8 bit
– Kedua operand tidak boleh keduanya variabel
Contoh :
MOV a,b ; ini salah, kedua operand a dan b adalah variabel
MOV al,b ; kedua perintah ini untuk menggantikan perintah
MOV a,al ; yang salah diatas
– Register segment tidak boleh diisi langsung, harus menggunakan perantara
Contoh :
MOV es,0b800h : salah, es tidak boleh diisi langsung
MOV ax,0b800h ; kedua perintah ini untuk menggantikan perintah
MOV es,ax ; yang salah diatas
. Untuk intterupt, ingatlah bahwa setiap interrupt memiliki syarat – syarat sebelum dipanggil.
Penuhi syarat – syarat itu sebelum melakukan intterupt.

12. Contoh Program Sederhana


——————————
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
begin : jmp start
kal1 db ‘Masukkan sebuah karakter : $’
kal2 db 10,13,’Karakter yang anda masukkan adalah : $’
kar db ?

start : mov ah,0


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
misal : tasm test.asm
Maka akan dihasilkan sebuah object file berekstensi .obj, kemudian link file tersebut dengan
perintah :
tlink /t
misal : tlink /t test.obj
Maka akan dihasilkan sebuah file berekstensi .com, cobalah jalankan !

Penjelasan :
– 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.

note : untuk melihat nomor-nomor service-service yang terdapat pada komputer gunakan
program Helppc

Chapter 1 : Struktur Program COM


Compiler Assembly sudah banyak tersedia di internet, contohnya TASM (Turbo Assembler),
MASM (Microsoft Assembler), NASM (Netwide Assembler), dan lain-lain.

Mengapa menggunakan bahasa Assembly?

1. Cepat, Lebih cepat dari compiler lainnya.

2. Lebih dekat dengan bahasa mesin, disebabkan bahasa Assembly dialamatkan 1:1 dengan
bahasa mesin.

3. Kode yang dihasilkan lebih kecil dari compiler lainnya.

4. Dapat mengakses hardware lebih luas.

Salah satu bentuk program yang dapat dihasilkan oleh compiler Assembly adalah file COM.
FIle COM adalah struktur program paling sederhana. Ada beberapa syarat dalam pembuatan
atau penggunaan file COM :

1. Kode dan data program harus tidak lebih besar dari 64 KB.

2. Tidak dapat memesan alamat memori melalui sistem operasi.

Contoh bentuk kode program COM, ketiklah di teks editor yang dapat menghasilkan file
ASCII murni seperti Notepad, vi, atau lainnya. Simpan dengan nama COBAASM.ASM.

Versi TASM :
———————————-
ideal
p386n
model tiny

codeseg
org 100h
jmp start
;tempat data dan subrutin

start:
mov ax, 4c00h
int 21h
end
———————————-
Versi MASM :
———————————-
.386
.model tiny

.code
org 100h
entry:
jmp start
;tempat data dan subrutin

start:
mov ax, 4c00h
int 21h
end entry
———————————-

Compile-lah dengan perintah TASM.EXE COBAASM.ASM lalu dikuti dengan perintah


TLINK.EXE /T COBAASM.OBJ, jika menggunakan compiler TASM. Untuk compiler
MASM gunakan perintah ML COBAASM.ASM. Jika tak ada error, maka akan terlihat
output seperti ini :

E:\PUSHM0~1\TASM3>tasm.exe cobaasm.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International
Assembling file: cobaasm.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 460k

File yang dihasilkan dari proses kompilasi adalah file OBJ. Untuk merubah file OBJ ini
menjadi sebuah file EXE atau COM kita perlu melakukan “linking” dengan program linker.
Disini kita menggunakan TLINK.exe.

E:\PUSHM0~1\TASM3>tlink.exe /t cobaasm.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International

Argumen /t pada tlink.exe berarti kita ingin membuat file COM dari file .obj yang dihasilkan
oleh compiler. Sedangkan untuk membuat file EXE tidak perlu mengikutkan argumen /t.
Jalankan program COM tersebut :

E:\PUSHM0~1\TASM3>cobaasm.com

Apa yang terjadi? Tentunya tidak terjadi apa-apa karena kita belum menuliskan perintah
untuk program tersebut. Jadi program cobaasm.com tersebut hanya diload ke memory lalu
terminate dengan sendirinya.

Apa sih arti dari kode-kode diatas? lalu apa perbedaan antara kode yang ditulis untuk
compiler TASM dengan MASM?
berikut adalah penjelasan lengkapnya…
1. Perintah “ideal” berarti kita menggunakan syntax ideal dalanm compiler TASM.

2. Perintah “p386n” atau “.386” berarti kita menggunakan intruksi prosesor 80386.

3. Perintah “model tiny” atau “.tiny” berarti kita ingin menggunakan format file COM.

4. Perintah “codeseg” atau “.code” adalah awal dari kode program kita.

5. Perintah “org 100h” berarti program kita akan dimulai dari offset 100h.

6. Dalam compiler MASM kita perlu mendeklarasikan entry point untuk program, disini kita
gunakan label “entry:”.
Perlu diketahui kalau deklarasi sebuah label : “nama_label:”.

7. Program COM selalu diawali dengan “peloncatan” atau “jump” ke awal kode program.
Perintah yang digunakan adalah “jmp” diikuti dengan nama label, misalnya “start”. Bila
diperhatikan, diantara perintah “jmp start” dan label “start” adalah tempat dimana kita bisa
deklarasikan variabel-variabel ataupun data-data yang digunakan dalam program kita.

8. Untuk mengakhiri jalannya program, kita perlu membuat suatu perintah. Perintah “end”
atau “end entry” disini hanya menunjukkan akhir dari kode program, bukan untuk
MENGAKHIRI proses. 2 perintah yang digunakan adalah :

MOV AX, 4c00h


int 21h

Perintah MOV adalah perintah untuk menyalin isi data atau register ke suatu register lain.
Bentuk umum perintah MOV :

MOV tujuan_salin, asal_salin

Pada perintah diatas kita akan menyalin atau lebih tepatnya “mengisi” register AX (lebih
dikenal dengan register akumulator 16 bit) dengan bilangan heksa 4c00.
Sedangkan perintah INT 21h berarti kita menjalankan interrupt sistem dengan fungsi 21h.

Tugas

1. Buatlah program COM yang menampilkan teks ‘www.SrOer.OrG’!


Petunjuk :
– GUnakan variabel sebagai penyimpan teks, contoh :

teks db 13,13,’stringcoba’,’$’

Anda mungkin juga menyukai