Membuat Menu Sorot Pada Assembly



Bismillahirrahmanirrahim

Assalamu'alaykum

Pada kesempatan yang berbahagia ini kembali kita akan membahas mengenai bahasa pemrograman Assembly. Kita akan membuat program menu sorot, apa itu menu sorot ? menu sorot adalah menu yang di sorot, kwkkw. Secara teorinya kita membuat beberapa pilihan kemudian kita arahkan sorotan ke menu tersebut, ketika kita tekan enter, maka akan memilih program yang kita sorot tadi. Dalam program ini kita menggabungkan beberapa program lain, yaitu :

Menu :

1. Mencetak karakter satu warna
2. Mencetak karakter warna-warni
3. Program huruf rontok
4. Keluar

Seperti biasa siapkan terlebih dahulu aplikasi assemblernya, silahkan download di sini.

Kemudian siapkan juga Command Prompt atau bisa juga menggunakan  DOSBox. Selanjutnya siapkan text editor untuk mengetikkan kode program.

Pada program ini sangat mengandalkan macro,contohnya untuk memberishkan layar, membuat menu, dan menyorot menu, jadi pada program utama kita tinggal memanggil macro tersebut. 

contoh program :

cls macro
    mov ax,0600h
    xor cx,cx
    mov dx,184fh
    mov bh,7
    int 10h
endm

gotoxy macro x,y
       mov ah,02
       xor bx,bx
       mov dh,y
       mov dl,x
       int 10h
endm

simpanl macro
        local ulang
        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
        local ulang
        mov cx,4000
        xor bx,bx

ulang    :
        mov al,layar[bx]
        mov es:[bx],al
        inc bx
        loop ulang
endm

sorot     macro x,y
        local ulang

        mov bl,y
        mov al,160
        mul bl
        mov bx,ax

        mov al,x
        mov ah,2
        mul ah
        add bx,ax
        inc bx

        mov cx,20

ulang    :
        mov byte ptr es:[bx],6fh

        add bx,2
        loop ulang
endm

readkey    macro
        mov ah,00
        int 16h
endm

menul    macro string
        mov ah,09
        lea dx,string
        int 21h
endm


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
        sub bx,160
       
        loop loop2


        pop cx
        pop bx
        pop ax
endm



.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. Cetak Karakter               |',13,10
             db 9,9,'|  2. Karakter Berwarna            |',13,10
             db 9,9,'|  3. Program Rontok               |',13,10
             db 9,9,'|  4. Keluar                       |',13,10
             db 9,9,'|                                  |',13,10
             db 9,9,'+==================================+$'

        posx db 22
        posy db 12
    panah_atas equ 72
    panah_bawah equ 80
    tenter      equ 0dh

    proses    :
            cls
            gotoxy 0 8
            menul menu
            simpanl

    ulang    :
            balikl

            sorot posx,posy

    masukan :
            readkey
            cmp ah,panah_bawah
            je bawah

            cmp ah,panah_atas
            je ceky

            cmp al,tenter

            jne masukan
            jmp banding
   

    ceky    :
            cmp posy,12
            je maxy
            dec posy
            jmp ulang

   
    maxy    :
            mov posy,15
            jmp ulang

    bawah     :
            cmp posy,15
            je no1y
            inc posy
            jmp ulang

    no1y    :
            mov posy,12
            jmp ulang

banding    :
            cmp posy,12
            je karakter

            cmp posy,13
            je warna

            cmp posy,14
            je rontok

            cmp posy,15
            je keluar


    keluar    :
            jmp selesai

karakter :
            cls
            gotoxy 22,12

            mov ah,2h
            mov dl,'A'
            mov cx,26
    k1        :
            int 21h
            inc dl
            loop k1
            readkey
            jmp proses

    warna  :
            cls
            gotoxy 22,12
           
            mov ah,9h
            mov bx,29h
            mov al,'Z'
            mov cx,26

    k2     :
            int 10h
            dec al
            inc bl
            loop k2
            readkey
            jmp proses

    rontok : jmp prontok

    prontok : jmp kalimat
                kal db 'Melayang-layang  $'
                kal2 db 'Tekan Enter Untuk Kembali ke Menu $'

            kalimat :
            cls
            gotoxy 22,12

            mov ah,09
            lea dx,kal
            int 21h

            mov ax,0B800h
            mov es,ax

            mov bx,3998
            mov cx,25

        ulangY    :
        mov PosY,12
        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

        gotoxy 22,12
        mov ah,09h
        lea dx,kal2
        int 21h

        readkey
        jmp proses

    selesai :
            int 20h

end     tdata       

Ketikkan program diatas dalam text editor, selanjutnya simpan dengan ekstensi *.ASM. Kemudian ketikkan perintah tasm namaprogram dilanjutkan dengan tlink/t namaprogram


Jalankan program menur sorot tersebut.



Pada program diatas terdapat beberapa macro penting, yaitu

cls         : Macro untuk membersihkan layar.
readkey : Macro untuk membaca penekanan enter pada keyboard.
sorot     : Macro untuk membuat sorotan pada menu.
gotoxy   : Macro untuk menempatkan posisi karakter pada layar.

Kemudian untuk pilihan menu diatas terdapat pada bagian

masukan :
            readkey
            cmp ah,panah_bawah
            je bawah

            cmp ah,panah_atas
            je ceky

            cmp al,tenter

            jne masukan
            jmp banding

Ketika penekanan tombol Enter maka program akan langsung lompat ke banding.

Pada label banding sendiri terdapat perintah untuk membanding berada di posisi mana sorotan terhadap menu tersebut, ada 4 pilihan, yaitu di baris ke 12,13,14, atau 15.

banding    :
            cmp posy,12
            je karakter

            cmp posy,13
            je warna

            cmp posy,14
            je rontok

            cmp posy,15
            je keluar

Jika kita menekan tombol enter pada posisi pertama atau baris ke 12, maka program akan lompat ke label karakter, yaitu untuk mencetak karakter tanpa warna, begitu pula jika kita menekan tombol enter pada baris 13 atau posisi ke 2, maka akan menghasilkan karakter warna-warni.


Ketika plihan pertama dijalankan akan mencetak karakter tanpa warna.


Ketika pilihan kedua dijalankan akan mencetak karakter warna-warni.


Ketika memilih menu ketiga maka akan tampil sebuah kalimat yang melayang atau rontok ke atas.


Kemudian untuk pillihan keempat adalah untuk keluar dari program.

Terimakasih.

Wassalamualaykum.


4 komentar

bro cara buat nama sama npm trus di kasih bingkai "@@@@@@@@" itu gimana ya bro? thanks

Reply

Min cara buat menu didalamnya itu harga makanan bisa ngak

Reply

ko gak bisa yah heheh

Reply

Posting Komentar