Seperti biasa, pada kali ini kita akan membahas mengenai bahasa pemrograman Assembly, ya walaupun bahasa pemrograman ini sulit untuk dipamahi, tapi bukan berarti kita tidak bisa, walaupun sedikit, hahha.
Oke langsung saja, kita akan membuat program huruf rontok dengan Assembly, maksudnya gimana tuh huruf rontok ? Begini, ketika program tersebut dijalankan maka huruf yang berada dalam CMD atau DOSBox akan hilang atau rontok satu per satu.
Sebelum membuat program, beberapa hal yang harus disiapkan adalah :
Pertama Compiler dan linking Assembler nya, jika Anda belum pinya silahkan download di sini.
Selanjutnya adalah Command Prompt atau bisa juga digantikan dengan DOSBox.
Kemudian text editor untuk mengetikkan kode program.
Berikut kode program huruf rontoknya
delay macro
push cx
xor cx,cx
loop1 :
loop loop1
pop cx
endm
Geser macro PosY
push ax
push bx
push cx
xor cx,cx
mov al,26
sub al,PosY
mov cl,al
loop2 :
mov al,byte ptr es:[bx]
mov byte ptr es:[bx+160],al
hilang :
mov byte ptr es:[bx],' '
delay
add bx,160
loop loop2
pop cx
pop bx
pop ax
endm
.model small
.code
org 100h
Tdata : JMP Proses
PosY DB ?
Proses :
mov ax,0B800h
mov es,ax
mov bx,3998
mov cx,25
ulangY :
mov PosY,cl
push cx
mov cx,80
ulangX :
cmp byte ptr es:[bx],33
jb Tdk
Geser PosY
Tdk :
sub bx,2
loop ulangX
pop cx
loop ulangY
exit :
int 20h
end Tdata
push cx
xor cx,cx
loop1 :
loop loop1
pop cx
endm
Geser macro PosY
push ax
push bx
push cx
xor cx,cx
mov al,26
sub al,PosY
mov cl,al
loop2 :
mov al,byte ptr es:[bx]
mov byte ptr es:[bx+160],al
hilang :
mov byte ptr es:[bx],' '
delay
add bx,160
loop loop2
pop cx
pop bx
pop ax
endm
.model small
.code
org 100h
Tdata : JMP Proses
PosY DB ?
Proses :
mov ax,0B800h
mov es,ax
mov bx,3998
mov cx,25
ulangY :
mov PosY,cl
push cx
mov cx,80
ulangX :
cmp byte ptr es:[bx],33
jb Tdk
Geser PosY
Tdk :
sub bx,2
loop ulangX
pop cx
loop ulangY
exit :
int 20h
end Tdata
Ketikkan kode diatas pada text editor kemudian simpan dengan ekstensi *.ASM. Selanjutnya lakukan proses compile program di cmd atau DOSBox. Caranya ketikkan perintah tasm namaprogram selanjutnya lakukan proses linking dengan perintah tlink/t namaprogram. Jalankan program tersebut, maka hasilnya akan seperti gambar berikut :
Berikut penjelasan programnya :
delay macro
push cx
xor cx,cx
loop1 :
loop loop1
pop cx
endm
Macro ini digunakan untuk menunda program. Dengan menolkan CX, maka looping yang didapatkan menjadi FFFFh kali, karena pengurangan 0 dan 1 akan menghasilkan nilai -1 atau FFFFh.
Geser macro PosY
push ax
push bx
push cx
Pada macro inilah nantinya huruf-huruf pada layar akan digeser. Untuk itu simpanlah semua register yang digunakan pada macro ini karena pada program utama, register juga akan digunakan.
xor cx,cx
mov al,26
sub al,PosY
mov cl,al
Ini adalah bagian dari macro geser yang akan menghitung banyaknya pergeseran kebawah yang akan dilakukan, dengan melihat posisi dari huruf yan digeser pada variabel "PosY"
loop2 :
mov al,byte ptr es:[bx]
mov byte ptr es:[bx+160],al
hilang :
mov byte ptr es:[bx],' '
delay
add bx,160
loop loop2
Bagian inilah yang akan menggeser tulisan pada layar. Register BX ditambah dengan 160 untuk mengakses baris dibawahnya.
pop cx
pop bx
pop ax
endm
Pada akhir macro kembalikanlah semua register yang telah disimpan pada awal macro. Ingat urutannya harus terbalik.
Pada program utama :
.model small
.code
org 100h
Tdata : JMP Proses
PosY DB ?
Pertama-tama siapkanlah sebuah variabel untuk menampung posisi dari baris yang sedang diakses .
Proses :
mov ax,0B800h
mov es,ax
mov bx,3998
mov cx,25
Register ES, kita gunakan sebagai petunjuk segment layar, yaitu pada segment B800h. Register BX yang nantinya akan kita gunakan sebagai petunjuk offset dari ES diberi nilai 3998. Dengan demikian pasangan ES : BP akan menunjukpada karakter dipojok kanan bawah atau posisi 79,24.
ulangY :
mov PosY,cl
push cx
mov cx,80
ulangX :
cmp byte ptr es:[bx],33
jb Tdk
Geser PosY
Tdk :
sub bx,2
loop ulangX
pop cx
loop ulangY
exit :
int 20h
end Tdata
Kemudian lakukanlah proses dengan melihat apakah ada karakter atau tidak. Hal ini dapat dilakukan dengan membandingkannya dengan kode ASCII 33, bila data pada buffer layar dibawah ASCII 33 artinya tidak ada karakter pada layar.
Jika ada karakter pada layar maka proses geser dilakukan, sebalinya jika tidak ada karakter proses akan menuju pada posisi selanjutnya dan melakukan hal yang sama.
Pada contoh program diatas, kita merontokkan karakter dari atas kebawah, nah bagaimana jika kita ingin merontokkan karakter dari bawah keatas, berikut contoh programnya
delay macro
push cx
xor cx,cx
loop1 :
loop loop1
pop cx
endm
Geser macro PosY
push ax
push bx
push cx
xor cx,cx
mov al,48
sub al,PosY
mov cl,al
loop2 :
mov al,byte ptr es:[bx]
mov byte ptr es:[bx-160],al
hilang :
mov byte ptr es:[bx],' '
delay
sub bx,160
loop loop2
pop cx
pop bx
pop ax
endm
.model small
.code
org 100h
Tdata : JMP Proses
PosY DB ?
Proses :
mov ax,0B800h
mov es,ax
mov bx,3998
mov cx,25
ulangY :
mov PosY,cl
push cx
mov cx,80
ulangX :
cmp byte ptr es:[bx],33
jb Tdk
Geser PosY
Tdk :
sub bx,2
loop ulangX
pop cx
loop ulangY
exit :
int 20h
end Tdata
push cx
xor cx,cx
loop1 :
loop loop1
pop cx
endm
Geser macro PosY
push ax
push bx
push cx
xor cx,cx
mov al,48
sub al,PosY
mov cl,al
loop2 :
mov al,byte ptr es:[bx]
mov byte ptr es:[bx-160],al
hilang :
mov byte ptr es:[bx],' '
delay
sub bx,160
loop loop2
pop cx
pop bx
pop ax
endm
.model small
.code
org 100h
Tdata : JMP Proses
PosY DB ?
Proses :
mov ax,0B800h
mov es,ax
mov bx,3998
mov cx,25
ulangY :
mov PosY,cl
push cx
mov cx,80
ulangX :
cmp byte ptr es:[bx],33
jb Tdk
Geser PosY
Tdk :
sub bx,2
loop ulangX
pop cx
loop ulangY
exit :
int 20h
end Tdata
Ketika program tersebut dijalankan, maka karakter akan rontok keatas.
Untuk merontokkan huruf ke kanan kita bisa mengganti nilai mov menbyte ptr es:[bx-160],al menjadi mov byte ptr es:[bx+20],al dan menghapus bagian sub bx,160. lakukan proses kompilasi dan linking, maka ketika dijalankan hurufnya akan rontok atau melayang ke kanan.
Mungkin sampai disini dulu postingan ini, terimakasih.
Wassalamualaykum
Download Tutorial
1 komentar:
nice program gan, lanjutkan (y)
ReplyPosting Komentar