Dosen : Indra Gunawan, ST.,
M.Kom., CEH., CHFI
MODUL ASSEMBLY LANJUT
SEKOLAH TINGGI TEKNIK IBNU SINA BATAM
2018
MODUL ASSEMBLY LANJUT
1
PRAKATA
Untuk mendapatkan buku yang membahas Bahasa pemrograman Assembly secara mudah
dengan disertai diagram alir, maka dapat membaca buku saya secara gratis di internet, silakan
dilihat pada halaman referensi (Gunawan, 2019).
I.
INPUT KEYBOARD
1.1 PROGRAM #1, INTERUPT 21 SERVICE 1H
.model small
.code
org 100h
proses:
mov ah,1h ; read input with echo
mov dl, al
int 21h
loop proses
int 20h
end proses
1.2 PROGRAM #2, INTERUPT 21 SERVICE 0H
.model small
.code
org 100h
proses:
mov ah,0h ;get keystroke without buffer, al : ascii
int 16h
cmp al,00
je extended
jne biasa
extended:
mov ah,02h
mov dl,al
int 21h
loop proses
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
2
biasa:
mov ah,02h
mov dl,al
int 21h
loop proses
end proses
1.3 PROGRAM #3, INTERUPT 21 SERVICE 0H
.model small
.code
org 100h
datadeh :jmp mulai
var db 9,?,9 DUP(?)
mulai:
mov ah, 0ah ; only running in dosbox
lea dx, var
int 21h
lea bx, var+2
print:
mov ah,02h
mov dl,[bx]
int 21h
int 20h
end datadeh
1.4 PROGRAM #4, TUGAS
Modifikasi Program #3, untuk mencetak nama masing-masing
dipisah enter
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
3
II.
INPUT KEYBOARD LANJUT
2.1 PROGRAM #5, INTERUPT 21 SERVICE 0H
.model small
.code
org 100h
data :jmp proses
var db 23,?,23 DUP(?)
proses:
mov ah, 0ah ; only running in dosbox
lea dx, var
int 21h
xor bx,bx
lea cx, var + 1
mov ah,02h
cetak :
mov dl,var + 2
int 21h
inc bx
loop cetak
int 20h
end data
2.2 PROGRAM #6, TUGAS
Modifikasi program #5, buat 3 variabel berisi 2 jurusan,
jika diinput xxx muncul jurusan pertama, jika diinput yyy
muncul jurusan kedua.
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
4
III.
PROCEDURE
3.1 PROGRAM #7, MENCETAK HURUF MENGGUNAKAN PROCEDURE
.model small
.code
org 100h
;################## PROCEDURE
cetak proc near
mov ah,02h
mov dl, 'z'
int 21h
ret
cetak endp
;################## PROCEDURE
proses :
call cetak
int 20h
end proses
3.2 Program #8, Mencetak huruf menggunakan procedure
.model small
.code
org 100h
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
5
;################## PROCEDURE
cetak1 proc near
mov ah,02h
mov dl, var[0]
int 21h
cetak1 endp
cetak2 proc near
mov ah,02h
mov dl, var[1]
int 21h
cetak2 endp
cetak3 proc near
mov ah,02h
mov dl, var[2]
int 21h
cetak3 endp
cetak4 proc near
mov ah,02h
mov dl, var[3]
int 21h
ret
cetak4 endp
;################## PROCEDURE
data: jmp proses
var db 'satu'
proses:
call cetak1
call cetak2
call cetak3
call cetak4
int 20h
end data
3.3 PROGRAM #9, TUGAS
MODIFIKASI PROGRAM #7 ATAU #8, BUAT PROGRAM ASSEMBLY UNTUK
MENCETAK KALIMAT MENGGUNAKAN PROCEDURE.
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
6
IV.
MACRO
4.1 PROGRAM #10, PENGGUNAAN MACRO UNTUK MENCETAK HURUF
;########### MACRO ############
cetak macro x
mov ah,02h
mov dl,x
int 21h
endm
;########### MACRO ############
.model small
.code
org 100h
proses :
cetak 'a'
cetak 'k'
cetak 'u'
int 20h
end proses
4.2 PROGRAM #11, PENGGUNAAN MACRO UNTUK OPERASI ARITMATIKA
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
7
;################## MACRO
hitung macro x, y, z
mov ax, x
mov bx, y
add ax, bx
add bx, z
mul bx
endm
;################## MACRO
.model small
.code
org 100h
proses:
hitung 123h, 234h, 345h
int 20h
end proses
4.3 PROGRAM #12, PENGGUNAAN MACRO UNTUK MENCETAK HURUF
;################## MACRO
cetak macro x
mov ah,02h
mov dl, x
int 21h
endm
;################## MACRO
.model small
.code
org 100h
proses :
cetak 'z'
int 20h
end proses
4.4 PROGRAM #13, PENGGUNAAN MACRO MULTI VARIABLE
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
8
;################## MACRO
cetak macro x, y, z, a
mov dl, x
int 21h
mov dl, y
int 21h
mov dl, z
int 21h
mov dl, a
int 21h
endm
;################## MACRO
.model small
.code
org 100h
data:jmp proses
var db 'satu'
proses :
mov ah,02h
cetak var[0], var[1], var[2], var[3]
int 20h
end data
4.4 TUGAS
Buatlah program assembly menggunakan macro untuk mencetak 3 kalimat dipisah enter
Contoh : Yayasan Yapista
STT Ibnu Sina Batam
Teknik Informatika
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
9
V.
5.1 PROGRAM #14,
OPERASI LAYAR
MENCETAK 1 HURUF MENGGUNAKAN MEMORY LAYAR
cetak macro x,y,kal,atr
MOV AX,0B800h
MOV ES,AX ; ES Menunjuk pada segment layar
MOV
MOV
MUL
MOV
AH,Y
AL,160
AH ; Hitung offset baris
BX,AX ; Simpan hasilnya pada BX
MOV AH,X
MOV AL,2
MUL AH ; Hitung offset kolom
ADD BX,AX ; Tambahkan hasilnya pada BX
MOV AL,Kal ; AL=karakter yang akan ditampilkan
MOV AH,Atr ; AH=Atribut yang akan ditampilkan
MOV ES:BX, AL ; Tampilkan Karakter dan atributnya
MOV ES:BX+1,AH ; pada posisi kolom X dan baris Y
ENDM
;############### MACRO ###########
.MODEL SMALL
.CODE
ORG 100h
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
10
Proses :
cetak 40 23 'A' 95
INT 20h ;
END Proses
5.2 PROGRAM #15,
MENCETAK BANYAK HURUF MENGGUNAKAN MEMORY LAYAR
cetak macro x,y,kal,atr
MOV AX,0B800h
MOV ES,AX ; ES Menunjuk pada segment layar
MOV
MOV
MUL
MOV
AH,Y
AL,160
AH ; Hitung offset baris
BX,AX ; Simpan hasilnya pada BX
MOV AH,X
MOV AL,2
MUL AH ; Hitung offset kolom
ADD BX,AX ; Tambahkan hasilnya pada BX
MOV AL,Kal ; AL=karakter yang akan ditampilkan
MOV AH,Atr ; AH=Atribut yang akan ditampilkan
MOV ES:BX, AL ; Tampilkan Karakter dan atributnya
MOV ES:BX+1, AH ; pada posisi kolom X dan baris Y
ENDM
;############### MACRO ###########
.MODEL SMALL
.CODE
ORG 100h
Proses :
cetak 40 15 'S' 95
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
11
cetak 41 15
cetak 42 15
cetak 40 17
cetak 41 17
cetak 42 17
cetak 43 17
cetak 40 19
cetak 41 19
cetak 42 19
cetak 43 19
END Proses
INT 20h
5.3 PROGRAM #16,
'T'
'T'
'I'
'B'
'N'
'U'
'S'
'I'
'N'
'A'
97
65
23
35
63
58
14
37
33
48
MENCETAK ANIMASI MENGGUNAKAN MEMORY LAYAR
Delay MACRO x
LOCAL Ulang
mov dx, x
Ulang:
dec dx
cmp dx,0
jne ulang
ENDM
cetak macro x,y,kal,atr
MOV AX,0B800h
MOV ES,AX ; ES Menunjuk pada segment layar
MOV
MOV
MUL
MOV
AH,Y
AL,160
AH ; Hitung offset baris
BX,AX ; Simpan hasilnya pada BX
MOV AH,X
MOV AL,2
MUL AH ; Hitung offset kolom
ADD BX,AX ; Tambahkan hasilnya pada BX
MOV AL,Kal ; AL=karakter yang akan ditampilkan
MOV AH,Atr ; AH=Atribut yang akan ditampilkan
MOV ES:BX, AL ; Tampilkan Karakter dan atributnya
MOV ES:BX+1, AH ; pada posisi kolom X dan baris Y
ENDM
;############### MACRO ###########
.MODEL HUGE
.CODE
ORG 100h
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
12
Proses :
cetak 40 15 'S'
cetak 41 15 'T'
cetak 42 15 'T'
cetak 43 15 ' '
;delay 1111h
cetak 40 15 'I'
cetak 41 15 'B'
cetak 42 15 'N'
cetak 43 15 'U'
;delay 1111h
cetak 40 15 'S'
cetak 41 15 'I'
cetak 42 15 'N'
cetak 43 15 'A'
;delay 1111h
jmp proses
INT 20h
end Proses
5.4 PROGRAM #17,
95
97
65
58
23
35
63
58
14
37
33
48
TUGAS
5.5 MODIFIKASI PROGRAM #16, UBAH AGAR PROGRAM TERSEBUT DAPAT
MENGHITUNG BILANGAN PERTAMBAHAN, PENGURANGAN, DAN PERKALIAN
BANYAK BILANGAN SECARA SEKUENSIAL.
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
13
VI.
6.1 PROGRAM #18,
OPERASI LAYAR LANJUT
MENCETAK ANIMASI KALIMAT MENGGUNAKAN MEMORY
LAYAR
Delay MACRO x
LOCAL Ulang
mov dx,0h
Ulang:
inc dx
cmp dx,x
je ulang
ENDM
cetak macro x,y,kal,atr
MOV AX,0B800h
MOV ES,AX ; ES Menunjuk pada segment layar
MOV
MOV
MUL
MOV
AH,Y
AL,160
AH ; Hitung offset baris
BX,AX ; Simpan hasilnya pada BX
MOV AH,X
MOV AL,2
MUL AH ; Hitung offset kolom
ADD BX,AX ; Tambahkan hasilnya pada BX
MOV AL,kal ; AL=karakter yang akan ditampilkan
MOV AH,atr ; AH=Atribut yang akan ditampilkan
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
14
MOV ES:BX,AL ; Tampilkan Karakter dan atributnya
MOV ES:BX+1,AH ; pada posisi kolom X dan baris Y
ENDM
;############### MACRO ###########
.MODEL SMALL
.CODE
ORG 100h
data:
jmp proses
var db 'Yayasan Ibnu Sina Batam'
warna db 0fh
kolom db 017h
baris db 0fh
proses:
; Setiap selesai cetak kalimat, nol kan bx, set ulang
kolom ke 40d
xor bx,bx
mov ah,017h
mov kolom,ah
proses3:
push bx ; menyimpan nilai bx untuk dipakai lg
mov dl,var[bx]
cetak kolom baris dl warna
pop bx ; isi bx dari stack
; naikkan nilai warna
xor ah,ah
mov ah,warna
add ah,0Ah
mov warna,ah
; naikkan nilai kolom
xor ah,ah
mov ah,kolom
add ah,01h
mov kolom,ah
; sleep program dgn loop sebanyak 1111x
terlihat
delay 0fffh
agar animasi
;naikkan nilai bx
inc bx
cmp bx,017H
push bx
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
15
je proses
loop proses3
loop proses
INT 20h
end data
VII.
7.1 PROGRAM #19,
MANIPULASI STRING
PENGULANGAN PADA STRING
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
Kalimat DB 'Donald Duck$' ; 12 karakter
Buffer DB 12 DUP(?)
Proses:
LEA SI,Kalimat ; SI = sumber
LEA DI,Buffer ; DI = tujuan
CLD ; Arah proses menaik
MOV CX,18 ; Banyaknya pengulangan
REP MOVSB ; ES:Buffer,Kalimat
; Pindahkan data
; 'kalimat' ke 'Buffer'
MOV AH,09 ;
LEA DX,Buffer ;
INT 21h ; Cetak Data pada Buffer
INT 20h
END TData
7.2 PROGRAM #20,
PERBANDINGAN PADA STRING
Cetak_Klm MACRO Kal
MOV AH,09
LEA DX,Kal ; Macro untuk mencetak kalimat
INT 21h
ENDM
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
16
Kal1 DB 'akjsdfhakjvhdf'
Kal2 DB 'akjsdfhakPvhdf'
Pesan1 DB 'Kedua kalimat yang dibandingkan sama ! $'
Pesan2 DB 'Kedua kalimat yang dibandingkan tidak
sama !$'
Proses:
LEA SI,Kal1
LEA DI,Kal2
CLD ; Arah proses menaik
MOV CX,14 ; Banyaknya perbandingan dilakukan
Ulang:
REP CMPSB ; Bandingkan selama sama
JNE TdkSama ; Jika tidak sama, lompat ke TdkSama
Cetak_Klm Pesan1 ; Cetak pesan tidak sama
JMP EXIT ; Selesai
TdkSama:
Cetak_Klm Pesan2 ; Cetak pesan sama
EXIT:
INT 20h
END TData
7.3 PROGRAM #21,
OPERASI SCAN PADA STRING
Cetak_Klm MACRO Kal
MOV AH,09 ;
LEA DX,Kal ;
INT 21h ; Macro untuk mencetak kalimat
ENDM
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
Cari DB 'akddtiuerndfalDfhdadfbn' ; 24 buah karakter
Ketemu DB ' Karakter ''s''yang dicari ketemu ! $'
Tidak DB ' Karakter ''s'' yang dicari tidak ketemu ! $'
Proses:
LEA DI,Cari ; Lokasi dari string yang diScan
MOV AL,'s' ; Karakter yang dicari
MOV CX,24 ; Banyaknya proses Scan
REPNE SCASB ; Scan sebanyak CX atau sampai ZF=1
JNZ Tdk_Ada ; Jika tidak ketemu, maka lompat!
Cetak_Klm Ketemu ; Cetak ketemu
JMP Exit ; Habis
Tdk_Ada:
Cetak_Klm Tidak ; Cetak tidak ketemu
EXIT: INT 20h ; Selesai
END TData
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
17
VIII.
OPERASI BILANGAN
8.1 PROGRAM #20,
MENCETAK ANGKA DESIMAL
.MODEL SMALL
.CODE
ORG 100h
TData:
JMP Proses
Test_Angka DW 65535 ; Angka yang akan dicetak
Proses:
MOV AX,Test_Angka ; AX = angka yang akan dicetak
MOV BX,10 ; BX = penyebut
XOR CX,CX ; CX = 0
Ulang:
XOR DX,DX ; Cegah sisa bagi menjadi pembilang !
DIV BX ; Bagi angka yang akan dicetak dengan 10
PUSH DX ; Simpan sisa bagi dalam stack
INC CX ; CX ditambah 1
CMP AX,0 ; Apakah hasil bagi sudah habis ?
JNE Ulang ; Jika belum, ulangi lagi !
Cetak:
POP DX ; Ambil 1 angka yang disimpan
ADD DL,'0' ; Ubah angka tersebut dalam kode ASCII
MOV AH,02 ;
INT 21h ; Cetak angka tersebut
LOOP Cetak ; ulangi
INT 20h
END Tdata
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
18
8.2 PROGRAM #21,
MENCETAK ANGKA HEXADESIMAL
Cetak MACRO
MOV DL,Tabel_Hex[BX] ; MACRO untuk
MOV AH,02 ; mencetak
INT 21h ; huruf ke BX pada tabel_Hex
ENDM
.MODEL SMALL
.CODE
ORG 100h
TData:
JMP Proses
Tabel_Hex DB '0123456789ABCDEF'
Test_Angka DB 255 ; Angka yang akan dicetak 255=FFh
Proses:
SUB BH,BH ; Jadikan BH=0
MOV BL,Test_Angka ; BL = angka yang akan dicetak
PUSH BX ; Simpan angka tersebut
MOV CL,4 ; Ambil 4 bit tinggi dari +
SHR BL,CL ; BL untuk dicetak
Cetak ; Cetak 1 angka hexa tingginya
POP BX ; Ambil angka yang disimpan
AND BL,0Fh ; Ambil 4 bit rendah dari +
Cetak ; BL untuk dicetak
INT 20h
END Tdata
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
19
IX.
9.1 PROGRAM #22,
AKSES FILE
MACRO UNTUK MEMBACA FILE
Read MACRO Handle,Number,Buffer
PUSH BX
PUSH CX
PUSH DX
MOV AH,3Fh
MOV BX,Handle
MOV CX,Number
LEA DX,Buffer
INT 21h
POP DX
POP CX
POP BX
ENDM
9.2 PROGRAM #23,
MACRO UNTUK MEMBUAT FILE
Create MACRO NamaFile, Attribut, Handle
PUSH CX
PUSH DX
MOV AH,3Ch
MOV CX,Attribut
LEA DX,NamaFile
INT 21h
MOV Handle,AX
POP DX
POP CX
ENDM
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
20
9.3 PROGRAM #24,
MENGHAPUS FILE
Delete MACRO Nama
MOV AH,41h ; Servis untuk menghapus file
LEA DX,Nama ; DS:DX menunjuk pada nama file
INT 21h
ENDM
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
Error DB ' Sorry, File anda tidak bisa dihapus !',13,10
DB ' Anda harus menggunakan parameter ',13,10
DB ' seperti:
DB ' C:\> Hapus FILE_X ',13,10,10
DB ' untuk menghapus file FILE_X $'
Proses: MOV DI,80h ; Alamat awal parameter
MOV AL,0Dh ; Karakter Enter
REPNE SCASB ; Cari karakter Enter
DEC DI ; DI menunjuk karakter Enter
MOV AL,0 ; Jadikan ASCIIZ
STOSB ; Letakkan byte 0 pada DS:[DI]
MOV DI,82h ; Awal String
Delete [DI] ; Hapus file parameter
JNC Exit ; Jika tidak ada kesalahan, Habis
MOV AH,09 ; Jika ada kesalahan
LEA DX,Error ; Tampilkan peringatan !
INT 21h
Exit:
INT 20h
END TData
9.4 PROGRAM #25,
MENULIS PADA FILE
Write MACRO Handle,Number,Buffer
PUSH BX
PUSH CX
PUSH DX
MOV AH,40h
MOV BX,Handle
MOV CX,Number
LEA DX,Buffer
INT 21h
POP DX
POP CX
POP BX
ENDM
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
21
9.5 PROGRAM #26,
MENUTUP FILE
Close MACRO Handle
PUSH BX
MOV AH,3Eh
MOV BX,Handle
INT 21h
POP BX
ENDM
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
22
X.
GRAFIK
11.1 PROGRAM 26# , MEMBUAT GARIS HORIZONTAL DAN VERTIKAL
MENGGUNAKAN INTERUPT 10H SERVICE 013H
Readkey MACRO
MOV AH,00h
INT 16h
ENDM
SetCRT MACRO Mode
MOV AH,00h
MOV AL,Mode
INT 10h
ENDM
PutPixel MACRO X,Y,Warna
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,0Ch ; Servis menggambar pixel
MOV CX,X ; Posisi kolom atau X
MOV DX,Y ; Posisi baris atau Y
MOV AL,Warna ; Atribut Pixel
INT 10h ; Gambar pixel tersebut !
POP DX
POP CX
POP BX
POP AX
ENDM
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
23
GarisV MACRO X1,Y1,Panjang,Warna
LOCAL Ulang
PUSH DX
PUSH CX
push ax
mov ax,X1
MOV DX,Y1
MOV CX,Panjang
Ulang:
PutPixel AX,DX,Warna
INC DX
LOOP Ulang
pop ax
POP CX
POP DX
ENDM
GarisH MACRO X1,Y1,Panjang,Warna
LOCAL Ulang
PUSH DX
PUSH CX
push ax
mov ax,X1
MOV DX,Y1
MOV CX,Panjang
Ulang:
PutPixel ax,DX,Warna
INC ax
LOOP Ulang
pop ax
POP CX
POP DX
ENDM
;/===============================================\;
; Program : GRAPH0.ASM ;
; Author : S’to ;
; Fungsi : Menggambar garis vertical ;
; dan horisontal ;
;\===============================================/;
.MODEL small
.CODE
ORG 100h
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
24
Proses:
SetCRT 013h ; Aktifkan mode grafik 13h
GarisH 250,50,50,12 ; Gambar garis Horisontal
GarisV 250,50,50,12 ; Gambar garis Vertikal
SetCRT 03h ; Kembali pada mode Dos
INT 20h
END Proses
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
25
11.2 PROGRAM 27# , MEMBUAT OBYEK TULISAN DENGAN GARIS
Readkey MACRO
MOV AH,00h
INT 16h
ENDM
SetCRT MACRO Mode
MOV AH,00h
MOV AL,Mode
INT 10h
ENDM
PutPixel MACRO X,Y,Warna
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,0Ch ; Servis menggambar pixel
MOV CX,X ; Posisi kolom atau X
MOV DX,Y ; Posisi baris atau Y
MOV AL,Warna ; Atribut Pixel
INT 10h ; Gambar pixel tersebut !
POP DX
POP CX
POP BX
POP AX
ENDM
GarisV MACRO X1,Y1,Panjang,Warna
LOCAL Ulang
PUSH DX
PUSH CX
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
26
push ax
mov ax,X1
MOV DX,Y1
MOV CX,Panjang
Ulang:
PutPixel AX,DX,Warna
INC DX
LOOP Ulang
pop ax
POP CX
POP DX
ENDM
GarisH MACRO X1,Y1,Panjang,Warna
LOCAL Ulang
PUSH DX
PUSH CX
push ax
mov ax,X1
MOV DX,Y1
MOV CX,Panjang
Ulang:
PutPixel ax,DX,Warna
INC ax
LOOP Ulang
pop ax
POP CX
POP DX
ENDM
GambarObyek MACRO
; S
GarisH
GarisV
GarisH
GarisV
GarisH
; buat object 3 kubus
150,50,50,12
150,50,50,15
150,100,50,13
200,100,50,15
150,150,50,12
; T
GarisH 460,50,50,14
GarisV 485,50,100,13
; T
GarisH 540,50,50,12
GarisV 560,50,100,12
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
27
ENDM
;/===============================================\;
; Author : Indra ;
; Fungsi : Menggambar object dengan garis ;
;\===============================================/;
.MODEL SMALL
.CODE
ORG 100h
Proses:
SetCRT 13h ; Aktifkan mode grafik 13h
GambarObyek
readkey
SetCRT 03h ; Kembali pada mode Dos
INT 20h
END Proses
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
28
XI.
GRAFIK LANJUT
12. 1 MENGGAMBAR OBYEK BEBAS, PROGRAM #28
10H /SERVICE 13H
MENGGUNAKAN INTERRUPT
Readkey MACRO ; Untuk menunggu masukan dari
MOV AH,00 ; Keyboard
INT 16h
ENDM
SetCRT MACRO Mode ; Untuk merubah mode layar
MOV AH,00 ;
MOV AL,Mode ;
INT 10h
ENDM
Pixel MACRO X,Y,Warna ; Untuk menggambar pixel
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,12 ; Servis menggambar pixel
MOV CX,X ; Posisi kolom atau X
MOV DX,Y ; Posisi baris atau Y
MOV AL,Warna ; Atribut Pixel
INT 10h ; Gambar pixel tersebut !
POP DX
POP CX
POP BX
POP AX
ENDM
;/====================================================\;
; Program : ANIMATE1.ASM ;
; Author : S’to ;
; Fungsi : Menggambar helikopter ;
;\====================================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Gambar DW 0000000000000000b,0000000000000000b
DW 0000000000011111b,1111100000000000b
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
29
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
0000000000100000b,0000010000000000b
0000000001000110b,0110010000000000b
0011000000101110b,0111010000001100b
0011100000100110b,0110001000011100b
0011110001000000b,0000001000111100b
0011111100000000b,0000000011111100b
0011111000000000b,0000000000001100b
0011010000000000b,0000000000101100b
0011001000000000b,0000000001001100b
0011000100000000b,0000000010001100b
0011000001111111b,1111111000001100b
0000000000000000b,0000000000000000b
0000000000000000b,0000000000000000b
0000000000000000b,0000000000000000b
0000000000011111b,1111100000000000b
0000000000100000b,0000010000000000b
0000000001000110b,0110010000000000b
0011000000101110b,0111010000001100b
0011100000100110b,0110001000011100b
0011110001000000b,0000001000111100b
0011111100000000b,0000000011111100b
0011111000000000b,0000000000001100b
0011010000000000b,0000000000101100b
0011001000000000b,0000000001001100b
0011000100000000b,0000000010001100b
0011000001111111b,1111111000001100b
0000000000000000b,0000000000000000b
0000000000000000b,0000000000000000b
0000000000000000b,0000000000000000b
0000000000011111b,1111100000000000b
0000000000100000b,0000010000000000b
0000000001000110b,0110010000000000b
0011000000101110b,0111010000001100b
0011100000100110b,0110001000011100b
0011110001000000b,0000001000111100b
0011111100000000b,0000000011111100b
0011111000000000b,0000000000001100b
0011010000000000b,0000000000101100b
0011001000000000b,0000000001001100b
0011000100000000b,0000000010001100b
0011000001111111b,1111111000001100b
0000000000000000b,0000000000000000b
0000000000000000b,0000000000000000b
PosX DW 100 ; Posisi awal X
PosY DW 30 ; Posisi awal Y
Proses:
SetCRT 13h ; Aktifkan mode grafik
SUB BX,BX ;
MOV CX,45 ; CX=banyaknya baris
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
30
Ulang1:
PUSH CX
MOV CX,2 ; CX=banyaknya Word dalam 1 baris
Ulang2:
PUSH CX
MOV CX,16 ; CX=Banyaknya bit dalam 1 word
MOV AX,1000000000000000b
Ulang3:
PUSH AX
AND AX,Gambar[BX] ; Test bit Gambar yang ke AX
JZ Nol ; Jika nol, lompat
Pixel PosX,PosY,83 ; Jika tidak, gambar pixel
Nol:
POP AX ;
SHR AX,1 ;
INC PosX ; Tambah posisi X
LOOP Ulang3 ; Test bit Gambar berikutnya
ADD BX,2 ; Akses word berikutnya
POP CX
LOOP Ulang2 ; Test word berikutnya
INC PosY ;
SUB PosX,32 ; Kembalikan posisi X mula-mula
POP CX
LOOP Ulang1 ; Test word pada baris berikutnya
Exit:
Readkey
SetCRT 03h ; Aktifkan Mode default Dos
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
31
12. 2 MENGGAMBAR ANIMASI OBYEK BEBAS, PROGRAM #29 MENGGUNAKAN
INTERRUPT 10H /SERVICE 13H DENGAN KONTROL KEYBOARD
SetCRT MACRO Mode ; Untuk merubah mode layar
MOV AH,00 ;
MOV AL,Mode ;
INT 10h
ENDM
Pixel MACRO X,Y,Warna ; Untuk menggambar pixel
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,12 ; Servis menggambar pixel
MOV CX,X ; Posisi kolom atau X
MOV DX,Y ; Posisi baris atau Y
MOV AL,Warna ; Atribut Pixel
INT 10h ; Gambar pixel tersebut !
POP DX
POP CX
POP BX
POP AX
ENDM
Katak MACRO Gambar,Warna
LOCAL Ulang1,Ulang2,Ulang3,Nol,Ulang0,Ulang
PUSH AX ;
PUSH BX ; Simpan semua register yang
PUSH CX ; digunakan
PUSH DX ;
SUB BX,BX ;
MOV CX,15 ; CX=banyaknya baris
Ulang1:
PUSH CX
MOV CX,2 ; CX=banyaknya Word dalam 1 baris
Ulang2:
PUSH CX
MOV CX,16 ; CX=Banyaknya bit dalam 1 word
MOV AX,1000000000000000b
Ulang3:
PUSH AX
AND AX,Gambar[BX] ; Test bit Gambar yang ke AX
JZ Nol ; Jika nol, lompat
Pixel PosX,PosY,83 ; Jika tidak, gambar pixel
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
32
Nol:
POP AX ;
SHR AX,1 ;
INC PosX ; Tambah posisi X
LOOP Ulang3 ; Test bit Gambar berikutnya
ADD BX,2 ; Akses word berikutnya
POP CX
LOOP Ulang2 ; Test word berikutnya
INC PosY ;
SUB PosX,32 ; Kembalikan posisi X mula-mula
POP CX
LOOP Ulang1 ; Test word pada baris berikutnya
ENDM
BacaKey MACRO data
MOV AH,00d ; Keyboard
INT 16h
Local Kiri, Kanan
CMP AL,64h
JE Kanan
CMP AL,61h
JE Kiri
Kiri:
Katak data,00d
SUB PosX, 20
Katak data,16d
Kanan:
Katak data,00d
ADD PosX, 20
Katak data,48d
ENDM
;/====================================================\;
; Program : ANIMATE1.ASM ;
; Author : Indra ;
; Fungsi : Menggambar Katak ;
;\====================================================/;
.MODEL HUGE
.CODE
ORG 100h
TData: JMP Proses
Data DW 0000000000000000b,0000000000000000b
DW 0000000000011111b,1111100000000000b
DW 0000000000100000b,0000010000000000b
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
33
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW
0000000001000110b,0110010000000000b
0011000000101110b,0111010000001100b
0011100000100110b,0110001000011100b
0011110001000000b,0000001000111100b
0011111100000000b,0000000011111100b
0011111000000100b,0010000000001100b
0011010000001100b,0011000000101100b
0011001001110010b,0100111001001100b
0011000111100000b,0000011110001100b
0011000001111111b,1111111000001100b
0000000000000000b,0000000000000000b
0000000000000000b,0000000000000000b
PosX DW 100 ; Posisi awal X
PosY DW 30 ; Posisi awal Y
Proses:
SetCRT 13h ; Aktifkan mode grafik
Katak Data,37d
BacaKey Data
Exit:
; Readkey
SetCRT 03h ; Aktifkan Mode default Dos
INT 20H
End Data
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI
MODUL ASSEMBLY LANJUT
34
XII.
REFERENSI
Gunawan, I. (2019). PEMROGRAMAN BAHASA ASSEMBLY MIKROPROSESOR 8086 (1 ed.).
Guepedia.
SELESAI
DOSEN PENGAMPU : INDRA GUNAWAN, ST., M.KOM., CEH., CHFI