; PROGRAM : BRA1.ASM ;
; AUTHOR : S’to ;
; FUNGSI : MENCETAK KALIMAT ;
; DENGAN BASE ;
; RELATIVE ADDRESSING;
; ;
;\==============================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kalimat DB 'NYAMUK GORENG' ; 13 karakter
Proses:
XOR BX,BX ; BX=0 Untuk penunjuk Offset
MOV CX,13 ; Counter LOOP
Ulang :
MOV DL,Kalimat[BX] ; Ambil karakter yang ke BX
MOV AH,02 ; Servis untuk cetak karakter
INT 21h ; Cetak Karakter
INC BX ; BX:=BX+1
LOOP Ulang ; Lompat ke Ulang sampai CX=0
INT 20h ; Selesai, kembali ke DOS !!
END TData
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Program: kal0.asm ;
; Oleh : S’to ;
; Fungsi : Mencetak String ;
; dengan Int 21 servis 9 ;
;=====================================;
.MODEL SMALL
.CODE
ORG 100h
Tdata : JMP Proses
Kal0 DB 'PROSES PENCETAKAN STRING ',13,10,'$'
Kal1 DB 'DIBELAKANG TANDA $ TIDAK BISA DICETAK '
Proses:
MOV AH,09h ; Servis ke 9
MOV DX,OFFSET Kal0 ; Ambil Alamat Offset Kal0
INT 21h ; Cetak perkarakter sampai tanda $
LEA DX,Kal0 ; Ambil Alamat Offset Kal0
INT 21h ; Cetak perkarakter sampai tanda $
LEA DX,Kal0+7 ; Ambil Alamat Offset KAl0+7
INT 21h ; Cetak perkarakter sampai tanda $
LEA DX,KAL1 ; Ambil Offset kal1
INT 21h ; Cetak perkarakter sampai ketemu $
INT 20h ; Selesai, kembali ke DOS
END Tdata
;/=============================================\;
; Program : ATTR-KLM.ASM ;
; Author : S’to ;
; Fungsi : Mencetak kalimat disertai ;
; atributnya ;
;-----------------------------------------------;
; INT 10h ;
;-----------------------------------------------;
; Input : ;
; AX = 1300h ;
; BL = Atribut ;
; BH = Halaman tampilan ;
; DL = Posisi X ;
; DH = Posisi Y ;
; CX = Panjang kalimat
; ES:BP = Alamat awal string ;
; ;
;\=============================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal0 DB ' Menulis kalimat dengan Atributnya '
Proses:
MOV AX,1300h ; Servis 13h subfungsi 00
MOV BL,10010101b ; Atribut tulisan
MOV BH,00 ; Halaman tampilan 0
MOV DL,20 ; Posisi X
MOV DH,12 ; Posisi Y
MOV CX,35 ; Banyaknya karakter dalam string
LEA BP,Kal0 ; ES:BP alamat string
INT 10h ; Cetak kalimat !
INT 20h ; Selesai, kembali ke DOS
END TData
;/========================================\;
; Program : READKEY.ASM ;
; Author : S’to ;
; Fungsi : Input satu karakter ;
; dari keyboard. ;
;==========================================;
; INTERUPSI 16h ;
;==========================================;
; Input: OutPut: ;
; AH = 0 Jika tombol biasa, maka: ;
; AL = ASCII ;
; AH = SCAN ;
; ;
; Jika Tombol khusus, maka ;
; AL = 00 ;
; AH = Extended ;
; ;
;\========================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
T_ASCII DB 13,10,'Ini adalah tombol ASCII : $'
T_Extended DB 13,10,'Ini adalah tombol Extended $'
Proses :
MOV AH,0 ; Servis Input satu karakter
INT 16h ; Laksanakan
PUSH AX ; Simpan hasil pembacaan pada stack
CMP AL,00 ; Apakah ini karakter extended ?
JE Extended ; Ya !, Lompat ke Extended
ASCII:
LEA DX,T_ASCII ; Ambil alamat efektif T_ASCII
MOV AH,09 ; Servis cetak kalimat
INT 21h ; Cetak kalimat !
POP AX ; Ambil kembali nilai AX pada stack
MOV DL,AL ; Ambil kode ASCII yang ditekan
MOV AH,2 ; Servis cetak karakter
INT 21h ; Cetak karakter !
CMP AL,'Q' ; Apakah yang ditekan huruf 'Q' ?
JE exit ; Ya !, lompat ke Exit
CMP AL,'q' ; Apakah yang ditekan huruf 'q' ?
JE exit ; Ya !, lompat ke Exit
JMP Proses ; Lompat ke Proses
Extended:
LEA DX,T_Extended ; Ambil alamat efektif T_Extended
MOV AH,09 ; Servis cetak kalimat
INT 21h ; Cetak kalimat !
JMP Proses ; Lompat ke Proses
exit: INT 20h ; Kembali ke DOS !
END TData
;/=========================================================\;
; Program : IN-KAL.ASM ;
; Author : S’to ;
; Fungsi : Input Kalimat dari ;
; keyboard. ;
;===========================================================;
; INTERUPSI 21h ;
;===========================================================;
; Input: ;
; AH = 0Ah ;
; DS:DX = Penampung dengan spesifikasi: ;
; Byte 1 = Maksimum karakter yang dapat dimasukkan ;
; Byte 2 = Akan dijadikan Indikator banyaknya ;
; karakter yang dimasukkan ;
; Byte 3 keatas = Tempat hasil masukan ditampung ;
; ;
; ;
;\=========================================================/;
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
T_Enter EQU 0Dh
Kal0 DB 'Ketikkan satu Kalimat : $'
Kal1 DB 13,10,'Kalimat pada buffer : $'
Buffer DB 23,?,23 DUP(?)
Proses : MOV AH,09
LEA DX,Kal0
INT 21h ; Cetak kalimat Kal0
MOV AH,0Ah ; Servis Input kalimat
LEA DX,Buffer ; DX menunjuk pada offset Buffer
INT 21h ; Input kalimat !
MOV AH,09
LEA DX,Kal1
INT 21h ; Cetak kalimat Kal1
LEA BX,Buffer+2 ; BX menunjuk byte ke 3 Buffer
Ulang:
CMP BYTE PTR [BX],T_Enter ; Apakah karakter Enter?
JE EXIT ; Ya! Lompat ke Exit
MOV DL,[BX] ; Masukkan karakter pada DL
MOV AH,02 ; Servis cetak karakter
INT 21h ; Cetak karakter
INC BX ; BX := BX+1
JMP Ulang ; Lompat ke Ulang
EXIT: INT 20h ; Kembali ke DOS !
END TData
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; PROGRAM : PROC_KAR.ASM ;
; FUNGSI : MENCETAK KARATER ;
; DENGAN PROCEDURE ;
; ;
;==========================S’to=;
.MODEL SMALL
.CODE
ORG 100h
Proses : CALL Cetak_Kar ; Panggil Cetak_Kar
INT 20h
Cetak_Kar PROC NEAR
MOV AH,02h
MOV DL,'S'
INT 21h ; Cetak karakter
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Procedures
END Proses
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kar DB ?
Klm DB 'BATMAN SI MANUSIA KELELAWAR ' ; 28 Karakter
Proses : MOV CX,28 ; Banyaknya pengulangan
XOR BX,BX ; Addressing Mode
Ulang :
MOV DL,Klm[BX]
MOV Kar,DL
CALL Cetak_Kar ; Panggil Cetak_Kar
INC BX
LOOP Ulang
INT 20h
Cetak_Kar PROC NEAR
PUSH AX ; Simpan semua register
PUSH DX ; Yang digunakan
MOV AH,02h
MOV DL,Kar
INT 21h ; Cetak karakter
POP DX ; Kembalikan semua register
POP AX ; Yang disimpan
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Procedures
END TData
Program 16.2. Menggunakan Procedure
;/====================================\;
; Program : TPTK.ASM ;
; Fungsi : Contoh menggunakan ;
; pustaka macro ;
;\====================================/;
INCLUDE PUSTAKA.MCR ; Gunakan file PUSTAKA.MCR
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal0 DB 'PENGGUNAAN PUSTAKA MACRO $'
Proses:
Cetak_Klm Kal0 ; Cetak Kalimat Kal0
Cetak_Kar 'Y' ; Cetak Huruf 'Y'
INT 20h
END TData
;/========================\;
; Program : PUSTAKA.MCR ;
;\========================/;
Cetak_Kar MACRO Kar ; Macro untuk mencetak
MOV AH,02 ; Karakter
MOV DL,Kar
INT 21h
ENDM
Cetak_Klm MACRO Klm ; Macro untuk mencetak
LEA DX,Klm ; kalimat
MOV AH,09
INT 21h
ENDM
Program 17.3. Pustaka.MCR
Tulis_Kar MACRO X,Y,Kar,Attr
MOV AX,0B800h
MOV ES,AX ; ES Menunjuk pada segment layar
MOV AH,Y
MOV AL,160
MUL AH ; Hitung offset baris
MOV 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,Kar ; AL=karakter yang akan ditampilkan
MOV AH,Attr ; 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
;/===============================================\;
; Program : LAYAR1.ASM ;
; Author : S’to ;
; ;
; Fungsi : Menampilkan karakter dan atributnya ;
; dengan menuliskannya langsung pada ;
; memory layar ;
;\===============================================/;
.MODEL SMALL
.CODE
ORG 100h
Proses :
Tulis_Kar 40 12 'S' 95 ; Tulis karakter 'S' dengan
; no atribut 95 pada posisi
INT 20h ; kolom 40 dan baris 12
END Proses
Cls MACRO ; Macro untuk menghapus layar
MOV AX,0600h
XOR CX,CX
MOV DX,184Fh
MOV BH,10 ; Atribut Hijau diatas hitam
INT 10h
ENDM
GotoXY MACRO X,Y ; Macro untuk memindahkan kursor
MOV AH,02
XOR BX,BX
MOV DH,Y
MOV DL,X
INT 10h
ENDM
SimpanL MACRO ; Macro untuk menyimpan seluruh
LOCAL Ulang ; isi layar monitor
MOV AX,0B800h
MOV ES,AX
MOV CX,4000
XOR BX,BX
Ulang:
MOV AL,ES:[BX]
MOV Layar[BX],AL
INC BX
LOOP Ulang
ENDM
BalikL MACRO ; Macro untuk mengembalikan semua
LOCAL Ulang ; isi layar yang telah disimpan
MOV CX,4000
XOR BX,BX
Ulang:
MOV AL,Layar[BX]
MOV ES:[BX],AL
INC BX
LOOP Ulang
ENDM
Sorot MACRO X,Y ; Macro untuk membuat sorotan
LOCAL Ulang ; pada menu
MOV BL,Y
MOV AL,160
MUL BL
MOV BX,AX
MOV AL,X
MOV AH,2
MUL AH
ADD BX,AX
INC BX ; Alamat warna pada posisi X,Y
MOV CX,25 ; Panjangnya sorotan
Ulang:
MOV BYTE PTR ES:[BX],4Fh ; Atribut sorotan
; putih diatas merah
ADD BX,2
LOOP Ulang
ENDM
Readkey MACRO ; Macro untuk membaca masukan dari
MOV AH,00 ; keyboard.
INT 16h ; hasilnya AH=Extended, AL=ASCII
ENDM
MenuL MACRO String ; Macro untuk mencetak menu
MOV AH,09
LEA DX,String
INT 21h
ENDM
;/==============================================\;
; Program : SOROT.ASM ;
; Author : S’to ;
; Fungsi : Membuat menu sorot untuk ;
; digunakan program ;
;\==============================================/;
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
Layar DB 4000 DUP (?)
Menu DB 9,9,'+=============================+',13,10
DB 9,9,'| »»» MENU SOROT ««« |',13,10
DB 9,9,'+=============================+',13,10
DB 9,9,'| |',13,10
DB 9,9,'| 1. Pilihan pertama |',13,10
DB 9,9,'| 2. Pilihan Kedua |',13,10
DB 9,9,'| 3. Pilihan Ketiga |',13,10
DB 9,9,'| 4. Pilihan Keempat |',13,10
DB 9,9,'| |',13,10
DB 9,9,'+=============================+$'
PosX DB 22 ; Posisi kolom mula-mula
PosY DB 12 ; Posisi baris mula-mula
Panah_Atas EQU 72 ; Kode tombol panah atas
Panah_Bawah EQU 80 ; Kode tombolpanah bawah
TEnter EQU 0Dh ; Kode tombol Enter
Proses :
Cls ; Hapus layar
GotoXY 0 8 ; kursor = 0,8
MenuL Menu ; Gambar menu
SimpanL ; Simpan isi layar
Ulang :
BalikL ; Tampilkan isi layar yang
; disimpan
Sorot PosX,PosY ; Sorot posisi X,Y
Masukan:
Readkey ; Baca masukan dari keyboard
CMP AH,Panah_Bawah ; Panah bawah yang ditekan ?
JE Bawah ; Ya! lompat bawah
CMP AH,Panah_Atas ; Panah atas yang ditekan ?
JE CekY ; Ya, lompat CekY
CMP AL,TEnter ; Tombol enter yang ditekan ?
JNE Masukan ; Bukan, lompat ke ulangi
JMP Selesai ; Ya, lompat ke selesai
CekY :
CMP PosY,12 ; Apakah sorotan paling atas ?
JE MaxY ; Ya! lompat ke MaxY
DEC PosY ; Sorotkan ke atas
JMP Ulang ; Lompat ke ulang
MaxY :
MOV PosY,15 ; PosY=Sorotan paling bawah
JMP Ulang ; lompat ke ulang
Bawah :
CMP PosY,15 ; apakah sorotan paling bawah ?
JE NolY ; Ya! lompat ke NolY
INC PosY ; Sorotkan ke bawah
JMP Ulang ; Lompat ke ulang
NolY :
MOV PosY,12 ; Sorotan paling atas
JMP Ulang ; Lompat ke ulang
Selesai:
INT 20h
END TData
.model small
.code
org 100h
start : jmp mulai
kt1 db “Masukkan Angka [1..3] : $”,13,10
kt2 db “Saya Laki-laki $”,13,10
kt3 db “Saya Perempuan $”,13,10
kt4 db “Saya Bukan Keduanya $”,13,10
mulai : mov ax,03h
int 10h
mov ah,09h
lea dx,kt1
int 21h
mov ah,01h
cmp al,’1’
je laki
cmp al,’2’
je wanita
cmp al,’3’
je bukan
laki : mov ah,09h
lea dx,kt2
int 21h
jmp selesai
wanita : mov ah,09h
lea dx,kt3
int 21h
jmp selesai
bukan : mov ah,09h
lea dx,kt4
int 21h
jmp selesai
selesai : int 20h
end start
.model small
.code
org 100h
start : jmp mulai
menu db “** MENU UTAMA **”13,10
db “<
db “********************”,13,10
db “1. Sarapan Pagi “,13,10
db “2. Makan Siang”,13,10
db “3. Makan Malam”,13,10
db “4. Exit”,13,10
db “------------------------------“,13,10
db “Tentukan Pilihan Anda [1..4] : $”
jwb1 db “1. Nasi Goreng”,13,10
db “2. Udang Goreng”,13,10
db “3. The Manis $”
jwb2 db “1. Nasi Putih”,13,10
db “2. Cumi Rebus”,13,10
db “3. Ikan Bakar”,13,10
db “4. Air Putih $”
jwb 3 db “1. Nasi Putih”,13,10
db “2. Kerang Rebus”,13,10
db “3. Kepiting Panggang:,13,10
db “4. Air Putih $”
mulai : mov ax,03h
int 10h
mov ah,02h
lea dx,menu
int 21h
mov ah,01h
cmp al,’1’
je pil1
cmp al,’2’
je pil2
cmp al,’3’
je pil3
jmp selesai
pil1 : mov ah,09h
lea dx,jwb1
int 21h
jmp selesai
pil2 : mov ah,09h
lea dx,jwb2
int 21h
jmp selesai
pil3 : mov ah,09h
lea dx,jwb3
jmp selesai
selesai : int 20h
end start