- Home>
- Assembly , Bahasa Rakitan >
- Program Rontok
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
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