Program Huruf Rontok dengan Assembly

Assalamu'alaykum

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

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

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)

Reply

Posting Komentar