Posted by : ikaas

pada hari ini saya akan membahas program rontok, seperti biasanya saya menggunakan DosBox sebagai CMD , dan Techapple sebagai TASM.EXE nya. untuk pembahasan pertama ini saya akan memberikan contoh program rontok yang hurufnya jatuh ke bawah.





berikut adalah lagkah langkah program rontok :
1. ketik edit pada DoxBox





2. lalu ketikan code dibawah ini 
   Delay  MACRO      
   PUSH  CX                           ; Macro ini digunakan untuk      
   XOR   CX,CX                      ; menunda program, dan
Loop1:      
            LOOP  Loop1             ; hanya melakukan looping      
            POP   CX      
            ENDM          
Geser  MACRO  PosY      
           PUSH   AX      
           PUSH   BX      
           PUSH   CX                 ; Simpan semua register yang digunakan

            XOR    CX,CX      
           MOV    AL,26      
           SUB    AL,PosY    
           MOV    CL,AL           ; CX=banyaknya pergeseran kebawah
Loop2:      
           MOV    AL,BYTE PTR ES:[BX]            ; AL=Karakter pada layar      
           MOV    BYTE PTR ES:[BX+160],AL    ; Geser ke bawah Hilang:      
           MOV    BYTE PTR ES:[BX],' '               ; Hapus karakter    ; sebelumnya    
           Delay                                                        ; delay, supaya bisa  ; terlihat    
           ADD    BX,160                                        ; Menuju baris selanjutnya    
           LOOP
Loop2                                      ; Ulangi ke Loop2
           POP    CX      
           POP    BX      
           POP    AX                    ; Kembalikan semua register yang digunakan ENDM                      

.MODEL SMALL      
.CODE      
ORG 100h

TData :   JMP Proses        
         PosY  DB  ?
Proses:        
        MOV   AX,0B800h        
        MOV   ES,AX               ; ES mencatat segment layar
        MOV   BX,3998            ; Posisi karakter 80,25        
        MOV   CX,25                ; Banyaknya pengulangan baris UlangY  :        
        MOV   PosY,CL            ; PosY mencatat posisi baris        
        PUSH  CX                     ; CX mencatat posisi Y        
        MOV   CX,80                ; Banyaknya pengulangan Kolom UlangX  :        
        CMP   BYTE PTR ES:[BX],33   ; Apakah ada karakter  ; pada layar ?        
        JB    Tdk                          ; Lompat ke Tdk, jika tidak ada        
        Geser PosY                     ; Geser karakter tersebut ke bawah  
Tdk  :                        
         SUB   BX,2                    ; BX menunjuk karakter selanjutnya          
         LOOP  UlangX              ; Proses 80 kali untuk kolom        
         POP   CX                       ; Ambil posisi Y        
         LOOP  UlangY              ; Ulangi dan ganti baris ke atas  
EXIT:        
         INT   20h
END    TData    

3. kemudian simpan dengan format  .ASM 
4. lalu test seperti gambar dibawah ini


 5. Bila program dijalankan, maka semua huruf pada layar akan dirontokkan satu persatu sampai habis.


Adapun penjelasan programnya adalah:

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 akan  didapatkan menjadi FFFFh kali, karena pengurangan 0 dengan 1 akan 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 oleh macro ini karena pada program utama, register-register juga 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 yang 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 penunjuk segment layar, yaitu pada segment B800h. Register BX yang nantinya akan kita gunakan sebagai penunjuk offset dari ES diberi nilai 3998. Dengan demikian pasangan ES:BP akan menunjuk pada 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, sebaliknya jika tidak ada karakter proses akan menuju pada posisi selanjutnya dan melakukan hal yang sama.    

untuk program yang sama namun semua hurufnya melayang ke atas

 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 


untuk mendownload data diatas bisa di download disini 

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © 2011 - 2014 Ika Sunarsih - Yui-Lovers V2 - Powered by Blogger - Designed by - -