Professional Documents
Culture Documents
Pengertian Assembly
Bahasa Assembly (Assembler) adalah merupakan salah satu dari sekian banyak
bahasapemrograman yang tergolong dalam Bahasa Pemrogaman Tingkat Rendah
(Low Level Language) dan hanya setingkat diatas bahasa mesin (Machine Language).
D. Interrupt
Contoh:
int 21h dengan service 09h untuk mencetak kalimat
Int 21h dengan service 02h untuk mencetak karakter
E. Register
a) CS (Code Segment)
Menunjukkan alamat segment dari program yang sedang aktif.
b) DS (Data Segment) : digunakan untuk menunjukkan tempat segmen dimana data-
data pada program disimpan
c) SS (Stack Segment) : Menunjukkan alamat segment dari stack yang digunakan
program.
d) ES (Extra Segment) : Merupakan dan register segment cadangan.
Mnemonic atau opcode ialah kode yang akan melakukan aksi terhadap operand . Operand
ialah data yang diproses oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau lebih
operand, kadang juga tidak perlu operand. Sedangkan komentar dapat kita berikan dengan
menggunakan tanda titik koma (;). Berikut contoh jumlah operand yang berbeda beda dalam
suatu assembly.
CJNE R0,#22H, Tasmi ;dibutuhkan 3 buah operand
MOVX @DPTR, A ;dibutuhkan 2 buah operand
RR A ;1 buah operand
NOP ; tidak memerlukan operand
Semua instruksi tersebut dapat dibagi menjadi lima kelompok menurut fungsinya, yaitu:
Instruksi Pemindahan Data
Instruksi Aritmatika
1. 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.
AAD mengubah dua hasil digit BCD menjadi AH dan AL menjadi angka biner yang
seimbang dalam AL. Pengaturan ini harus dibuat sebelum membagi dua hasil digit
BCD dalam AX dengan byte hasil BCD. Setelah pembagian, AL akan berisi hasil
bagi dari hasil BCD dan AH akan berisi sisa hasil BCD. PF, SF, dan ZF diperbaharui.
AF, CF, dan OF tidak diterangkan setelah AAD.
2. .PENAMBAHAN
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.
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).
G. 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
nama
. 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.
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.
INT 20h
Perintah INT adalah suatu perintah untuk menghasilkan suatu interupsi
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.
.model small
.code
org 100h
mulai:
mov ah,2
mov dl,'E'
int 21h
int 20h
end mulai
• Model small artinya menggunkan register dengan ukuran yang masih kecil yakni 16
bit memory
• Code dan org 100h adalah sebuah pasangan yang artinya kita memberi sebuah
perintah pada komputer agar menyediakan kode segmen segmen sebesar 100h
sebesar 256 bit memory.
• Mulai dan end Mulai adalah sebuah pasangan untuk awal dan akhir jalannya
program dengan variabel yang kita deklarasikan bebas contoh jika kita mengawali
dengan start maka pada akhir program berpasangan dengan end start untuk
mengakhiri pengkodean sebuah program
• Mov ah,2 artinya pindahkan nilai dua pada register ah perintah mengopi pada
sumber tujuan
• Mov dl,’E’ artinyapindahkan variabel ‘E’ ke dl
• Int 21h interup 21h berfungsi untuk mengerjakan service untuk layar , mencetak
ke layar sesuai dengan perintah mov
• Int 20h untuk menghentikan program
int 20h
end mulai
.model small
.code
org 100h
mulai:
mov ah, 02h
mov dl, 'A'
mov cx, 13
ulang:
int 21h
inc dl
loop ulang
int 20h
end mulai
loop ulang
int 20h
end mulai
.model small
.code
org 100h
mulai:
mov ah,09h
mov al,'j'
mov bh,00h
mov bl,011001b
mov cx,10
ulang:
Al untuk tulisan warna
int 10h
dec al Int 10h mencetak variabel dengan atribut
loop ulang
int 20h
end mulai
.model small
.code
org 100h
mulai:
jmp proses
vkal db 10,9,07,'mylove$'
proses:
mov ah,09h
lea dx ,vkal
int 21h
int 20h
end mulai
.model small
.code
org 100h
mulai:
jmp proses
vkal db'apakah kamu liburan k pantai?$'
vkal1 db 10, 'ya saya liburan$'
vkal2 db 10,'kasihan$'
proses:
mov ah,09h
lea dx,vkal
int 21h
mov ah,01h
int 21h
cmp al,'y'
je ya
jne ga
ya:
mov ah,09
lea dx,vkal1
int 21h
int 20h
ga:
mov ah,09
lea dx,vkal2
int 21h
int 20h
end mulai
Vkal db data base
Deklarasi variabel
Artinya membuat variabel bernama vkal dengan data base /nilai
tertentu
.........
mov ah,09h
.........
Syntax untukpemberian definisi ah yang lebih dari sebuah karakter
lea dx,vkal1 untuk pemanggilan data base memindahkannya kedalam dx
kemudian ditampilkan dengan syntax int 21h
mov ah, 01h untuk inputan karakter dan out put inputannya terlihat, dan
dimasukan kedalam variabel al
kemudian pada syntax cmp untuk membandingkan antara dua variabel
maka cmp al,’y’ berarti membandingkan nilai al apakah sama dengan nilai
karakter yang berupa huruf ‘y’
je (jump to if equal) artinya jika sama akan menuju
jne(jump to if not equal) artinya jika tidak sama
8. PROGRAM UNTUK MERUBAH KARAKTER (PASSWORD)
.model small
.code
org 100h
mulai:
jmp proses
vkal db 10,'MASUKAN
PASWORD PAKE HURUF KAPITAL:$'
vkal1 db 10,'INCORECT!!
ulangi dari awal....$'
vkal2 db 10, 'WELCOME ...$'
proses:
mov ah, 09h
lea dx, vkal
int 21h
mov ah, 07h
int 21h
cmp al, 'Y'
JE ya1
JNE ga1
ya1:
mov ah,02h
mOV dl, 2Ah
int 21h
mov ah, 07h
int 21h
cmp al, 'O'
je ya2
jne ga1
ga1:
mov ah, 09h
lea dx, vkal1
int 21h
jmp proses
ya2:
mov ah, 02h
mOV dl, 2Ah
int 21h
mov ah, 07h
int 21h
cmp al, 'U'
je ya3
jne ga1
ya3:
mov ah, 02h
mOV dl, 2Ah
int 21h
mov ah, 07h
int 21h
cmp al, 'R'
je ya4
jne ga1
ya4:
mov ah, 02h
mOV dl, 2Ah
int 21h
mov ah, 09h
lea dx, vkal2
int 21h
int 20h
int 20h
end mulai
LOGIKANYA:
• Program akan menampilkan nilai dari vkal yang telah disimpan dalam data base .
kemudian variabel vkal akan dipanggil dengan mencari variabel nya dengan
menggunakan sintak lea regiter,atribut .
mov ah, 09h
Pada lea dx, vkal menampilkan kalimat
int 21h
• Mov ah 07 artinya sintak untuk inputan yang telah kita ketik tidak terlihat dan sintak
mov ah,2Ah untuk menggganti inputan dengan karakter bintang
• cmp al,’Y’ .. ’ berarti membandingkan nilai al apakah sama dengan nilai karakter yang berupa
huruf ‘y’’
• JE ya1 jika benar menuju ke blok ya1
• Pada blok ya1 cetak (*) lalu kita harus menginput pasword selanjutnya apabila benar kita
harus input karakter pasword selanjutnya lagi sampai kata “YOUR” terpenuhi,jika semua benar
akan muncul
•
9. PROGRAM PENCARIAN KARAKTER DARI SEBUAH KALIMAT
.model small
.code
org 100h
data:
jmp mulai
asal db 'widya utama$'
kata db 'masukan huruf yang dicari:$'
ket1 db 'huruf ditemukan$'
ket2 db 'huruf tak ditemukan$'
mulai:
xor bx,bx; cek panjang kalimat
cek:
mov al,asal [bx] ;pindahan asal [index] ke al
inc bx
cmp al,'$'
jne cek
dec bx
mov cx,dx
xor bx,bx
mov ah,9
mov dx, offset asal
int 21h
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
mov ah,9
mov dx,offset kata
int 21h
mov ah,1
int 21h
ulang:
mov dl,asal [bx]
inc bx
cmp dl,'$'
je salah
cmp al,dl
jne ulang
jmp benar
salah:
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
mov ah,9
mov dx,offset ket2
int 21h
jmp barisbaru
benar:
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
mov ah ,9
mov dx,offset ket1
int 21h
jmp barisbaru
barisbaru:
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
int 20h
end data
LOGIKANYA:
• Jmp mulai : menuju ke blok mulai
• Xor bx,bx artinya mengembalikan nilai bx ke 0, bx=0
• lalu ke blok cek, pindahkann nilai asal [bx] ke al, berarti al=0
• inc bx : naikan nilai 1 pada bx, bx=1 yang berarti bx=w
• cmp al,'$' bandingkan apakah nilai al= $ atau al bernilai 11 padahal kata” widya
utama” hanya 10 karakter maka harus dikurangi 1, sedang di program ini $ akan tetep
terhitung karakter walaupun Cuma berfungsi sebagai penutup/tanda string
• jne cek Jika tidak lompat ke cek lagi ulangi program sampai al=$
• dec bx turunkan nilai 1 pada bx jadi bx=10 yang artinya sampai nilai karakter ke 10
yaitu a
• mov cx,dx perulangan sebanyak cx
• xor bx,bx Kembalikan nilai bx=0
• mov dx, offset asal Cetak asal (widyautama), mov ah,9 dan int 21h adalah pasangan
untuk mencetak kalimat
• mov dl,13 Untuk menurunkan tursor 13 dalam kode asci berarti enter ,10 berarti
kembalikan tursor ke pojok kiri
• mov dx,offset kata Cetak kata ( masukan huruf yang dicari)
• mov ah,1 Masukan inputan
• Pada blok ulang, pindahkan asal [bx] ke dl, nailkan nilai bx,
• Bandingkan apakah nilai dl =$
• Jika benar menuju ke blok salah
• Tapi kalau benar bandingkan apakah dl=al
• Jika tidak lompat ke blok ulang kembali
• Tapi kalau benar menuju ke blok benar
• Pada blok salah cetak ket2(huruf tak ditemukan)
• Pada blok benar cetak ket2 (huruf ditemukan) lalu lompat ke baris baru
• Pada baris baru enter ,dan kemballikan tursor ke pojok kiri
10. PROGRAM POP DAN PUSH
.model small
.code
org 100h
mulai:
mov bl,9
mov al,38
div bl
push ax
mov dl,al
add dl,31h
mov ah,2
int 21h
pop ax
mov dl,ah
mov ah,2
add dl,32h
int 21h
int 20h
end mulai
LOGIKANYA:
• bl=9 ,al=38 , bagi dengan bl berarti 38:9=4 sisa 2, sekarang al =4 dan ah=2
• pindahkan nilai al ke dl jadi dl=4
• tambahkan dl dengan31h dalam kode ascii=1 jadi dl=4+1=5 ,lalu cetak
• pindahkan nilai ah ke dl jadin dl=2, tambahkan nilai dl dengan 32h dalam kode
ascii =2 jadi dl=2+2=4 lalu cetak dl
• output=54
lalu compire program maka outputnya
11. PROGRAM OPERASI PENJUMLAHAN
.model small
.code
org 100h
mulai:
mov ax, 15
mov bx, 80
add ax, bx
mov bx, 10
xor cx, cx
ulang:
xor dx, dx
div bx
push dx
inc cx
cmp ax, 0
jne ulang
cetak:
pop dx
add dl, '0'
call cetak_k
loop cetak
int 20h
cetak_k proc near
mov ah, 02
int 21h
ret
cetak_k endp
end mulai
12. PROGRAM PEMBAGIAN
.model small
.code
org 100h
tdata:
jmp proses
test_angka dw 42
proses:
mov ax,test_angka
mov bx,5
xor cx,cx;cx
ulang:
xor dx,dx
div bx
push dx
inc cx
cmp ax,3
jne ulang
cetak:
pop dx
add dl,'1'
mov ah,02
int 21h
loop cetak
int 20h
end tdata
LOGIKANYA
42 :5 =8 sisa 2
1 : 5 = 0 sisa 1
13.
.model small
.code
org 100h
tdata:jmp res_kan
pesan db 'dibelokan'
noint equ 05h
bag_res proc
push ax
push bx
push cx
push dx
push es
push di
push ds
push si
mov ax,1300h
mov bl,01001111b
mov bh,00h
mov dl,20h
mov dh,12h;interupt prtscr
mov cx,44h
push cx
push es
lea bp,pesan
int 10h
pop si
pop ds
pop di
pop es
pop dx;kembalikan semua isi register
pop cx
pop bx
pop ax
iret ;akhir interep handler
bag_res endp
res_kan:
mov ah,25h
mov al,noint
lea dx,res_kan
int 27h
end tdata
14.
code segment
assume cs:code
org 100h
start:
jmp mulai
tanya db 'hello','$'
mulai:
mov ah,09h
mov dx, offset tanya
int 21h
mov ah ,01h
int 21h
cmp al, 'y'
je boot
int 20h
boot:
int 18h
code ends
end start