CONTOH PROGRAM BAHASA ASSEMBLY
Monday, March 26, 2012
Berikut ini contoh pprogram menggunakan Bahasa Assembly
.MODEL SMALL
.CODE
ORG 100H
AWAL:
MOV CL,30H
JMP PROSES
KAL0 DB 'Ketikkan satu kalimat:$'
KAL1 DB 13,10,'Kalimat yang diinput adalah:$'
KAL2 DB 13,10,'Cetak dari belakang:$',13,10
KAL3 DB 13,10,'panjang string adalah:$'
KALX DB 13,10,'$'
KAL4 DB 13,10,'Jumlah Huruf Vokal:$'
KAL5 DB 13,10,'Jumlah Huruf Konsonan:$'
KATA DB 20,?,20 DUP (?)
VOKAL: INC CL
JMP PLUS
PROSES:
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL0
INT 21H
;============= INPUT STRING ================
MOV AH,0AH
LEA DX,KATA
INT 21H
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL1
INT 21H
;============ CETAK VARIABEL STRING DG MODEL COMPARASI ==========
MOV BX,OFFSET KATA+2
CETAK:
MOV DL,[BX]
CMP DL,0DH
JE BELAKANG
MOV AH,02H
INT 21H
CMP DL,'a'
JE VOKAL
CMP DL,'i'
JE VOKAL
CMP DL,'u'
JE VOKAL
CMP DL,'e'
JE VOKAL
CMP DL,'o'
JE VOKAL
CMP DL,'A'
JE VOKAL
CMP DL,'I'
JE VOKAL
CMP DL,'U'
JE VOKAL
CMP DL,'E'
JE VOKAL
CMP DL,'O'
JE VOKAL
PLUS:INC BX
JMP CETAK
;============= CETAK KATA DARI BELAKANG ==================
BELAKANG:MOV AH,09H
MOV DX,OFFSET KAL2
INT 21H
MOV AH,09H
MOV DX,OFFSET KALX
INT 21H
CETAK1:
MOV DL,[BX]
CMP DL,KATA+1
JE VOKAL1
MOV AH,02H
INT 21H
DEC BX
JMP CETAK1
;============ CETAK JUMLAH VOKAL ================
VOKAL1:
MOV AH,09H
MOV DX,OFFSET KAL4
INT 21H
MOV DL,CL
;ADD DL,30H
MOV AH,02H
INT 21H
;============ CETAK JUMLAH KONSONAN ===============
KONSONAN:
MOV AH,09H
MOV DX,OFFSET KAL5
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
SUB DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
;============= CETAK PANJANG STRING ================
AKHIR:
MOV AH,09H
MOV DX,OFFSET KAL3
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
MOV AH,02H
INT 21H
SELESAI:
INT 20H
END AWAL
adsense here
.CODE
ORG 100H
AWAL:
MOV CL,30H
JMP PROSES
KAL0 DB 'Ketikkan satu kalimat:$'
KAL1 DB 13,10,'Kalimat yang diinput adalah:$'
KAL2 DB 13,10,'Cetak dari belakang:$',13,10
KAL3 DB 13,10,'panjang string adalah:$'
KALX DB 13,10,'$'
KAL4 DB 13,10,'Jumlah Huruf Vokal:$'
KAL5 DB 13,10,'Jumlah Huruf Konsonan:$'
KATA DB 20,?,20 DUP (?)
VOKAL: INC CL
JMP PLUS
PROSES:
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL0
INT 21H
;============= INPUT STRING ================
MOV AH,0AH
LEA DX,KATA
INT 21H
;============= CETAK STRING ================
MOV AH,09H
MOV DX,OFFSET KAL1
INT 21H
;============ CETAK VARIABEL STRING DG MODEL COMPARASI ==========
MOV BX,OFFSET KATA+2
CETAK:
MOV DL,[BX]
CMP DL,0DH
JE BELAKANG
MOV AH,02H
INT 21H
CMP DL,'a'
JE VOKAL
CMP DL,'i'
JE VOKAL
CMP DL,'u'
JE VOKAL
CMP DL,'e'
JE VOKAL
CMP DL,'o'
JE VOKAL
CMP DL,'A'
JE VOKAL
CMP DL,'I'
JE VOKAL
CMP DL,'U'
JE VOKAL
CMP DL,'E'
JE VOKAL
CMP DL,'O'
JE VOKAL
PLUS:INC BX
JMP CETAK
;============= CETAK KATA DARI BELAKANG ==================
BELAKANG:MOV AH,09H
MOV DX,OFFSET KAL2
INT 21H
MOV AH,09H
MOV DX,OFFSET KALX
INT 21H
CETAK1:
MOV DL,[BX]
CMP DL,KATA+1
JE VOKAL1
MOV AH,02H
INT 21H
DEC BX
JMP CETAK1
;============ CETAK JUMLAH VOKAL ================
VOKAL1:
MOV AH,09H
MOV DX,OFFSET KAL4
INT 21H
MOV DL,CL
;ADD DL,30H
MOV AH,02H
INT 21H
;============ CETAK JUMLAH KONSONAN ===============
KONSONAN:
MOV AH,09H
MOV DX,OFFSET KAL5
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
SUB DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
AKHIR:
MOV AH,09H
MOV DX,OFFSET KAL3
INT 21H
MOV BX,OFFSET KATA+1
MOV DL,[BX]
ADD DL,30H
MOV AH,02H
INT 21H
SELESAI:
INT 20H
END AWAL
adsense here
PENGERTIAN BAHASA ASSEMBLY
.MODEL SMALL ;memberitahu assembler berapa memori yang akan dipakai
.CODE ; Mendeklarasikan bahwa bagian dibawah ini adalah instruksi program
ORG 100h ;Mengatur awal dari program
TData : JMP Proses
T_ASCII DB 13,10,’Ini adalah tombol ASCII : $’
T_Extended DB 13,10,’Ini adalah tombol Extended $’
Proses : ;Deklarasi Proses
MOV AH,0 ; Servis Input satu karakter dan memasukan nilai 0 ke AH
INT 16h ; Menjalankan
PUSH AX ; Menyimpan hasil dari pembacaan pada stack
CMP AL,00 ; Percabangan apakah ini karakter extended ?
JE Extended ; Jika Betul !, Lompat ke Extended
.CODE ; Mendeklarasikan bahwa bagian dibawah ini adalah instruksi program
ORG 100h ;Mengatur awal dari program
TData : JMP Proses
T_ASCII DB 13,10,’Ini adalah tombol ASCII : $’
T_Extended DB 13,10,’Ini adalah tombol Extended $’
Proses : ;Deklarasi Proses
MOV AH,0 ; Servis Input satu karakter dan memasukan nilai 0 ke AH
INT 16h ; Menjalankan
PUSH AX ; Menyimpan hasil dari pembacaan pada stack
CMP AL,00 ; Percabangan apakah ini karakter extended ?
JE Extended ; Jika Betul !, Lompat ke Extended
ASCII: ;Deklarasi ASCII
LEA DX,T_ASCII ; Mengambil alamat T_ASCII
MOV AH,09 ; Memasukan nilai 09 ke AH
INT 21h ; Cetak kalimat !
POP AX ; Mengambil kembali nilai AX pada stack
MOV DL,AL ; Mengambil kode ASCII yang ditekan, Menduplikasikan isi register AL ke DL
MOV AH,2 ; Memasukan Nilai 2 ke AH
INT 21h ; Cetak karakter !
CMP AL,’Q’ ; Apakah yang ditekan huruf ‘Q’ ?
JE exit ; Jika Betul !, lompat ke Exit
CMP AL,’q’ ; Apakah yang ditekan huruf ‘q’ ?
JE exit ; Jika betul !, lompat ke Exit
JMP Proses ; Lompat ke Proses
LEA DX,T_ASCII ; Mengambil alamat T_ASCII
MOV AH,09 ; Memasukan nilai 09 ke AH
INT 21h ; Cetak kalimat !
POP AX ; Mengambil kembali nilai AX pada stack
MOV DL,AL ; Mengambil kode ASCII yang ditekan, Menduplikasikan isi register AL ke DL
MOV AH,2 ; Memasukan Nilai 2 ke AH
INT 21h ; Cetak karakter !
CMP AL,’Q’ ; Apakah yang ditekan huruf ‘Q’ ?
JE exit ; Jika Betul !, lompat ke Exit
CMP AL,’q’ ; Apakah yang ditekan huruf ‘q’ ?
JE exit ; Jika betul !, lompat ke Exit
JMP Proses ; Lompat ke Proses
Extended: ;Deklarasi Extended
LEA DX,T_Extended ; Mengambil alamat T_Extended
MOV AH,09 ; Memasukan nilai 09 ke AH
INT 21h ; Cetak dan menampilkan kalimat !
JMP Proses ; Lompat ke Proses
exit: INT 20h ; Pengembalian Nilai ke DOS !
END TData ; Program Selesai !
LEA DX,T_Extended ; Mengambil alamat T_Extended
MOV AH,09 ; Memasukan nilai 09 ke AH
INT 21h ; Cetak dan menampilkan kalimat !
JMP Proses ; Lompat ke Proses
exit: INT 20h ; Pengembalian Nilai ke DOS !
END TData ; Program Selesai !