[go: up one dir, main page]

Academia.eduAcademia.edu
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