Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program segment
- assume cs:Program,ds:dane,ss:stosik
- Start:
- mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- xor ax,ax
- xor dx,dx ;00H odczyt zegara systemowego
- int 1ah ;Read System-Timer Time Counter ;przerwanie zegarowe ;impusly co 55 milisekund zliczane od poczatku uruchomienia PC
- mov losowa,dl
- xor ax,ax
- xor dx,dx
- petlaProgramu:
- losowanieLinii:
- ;wybieranie linii która zostanie zamaskowana
- xor ax,ax
- inc losowa ;wylosowana linia zwiekszona o 1 (działanie pętli random)
- mov al,losowa
- mov si,ax ;16 bitowy rejestr adresacji , indeksowy źródła danych
- mov dl,losowanie(si) ;nr linii którą losuje
- mov losowaLinia,dl
- xor ax,ax
- mov al,160
- mul losowaLinia ;mnozenie wylosowanej liczby razy 160, zeby być na poczatku linii- 80 znakow w lini,
- mov bx,ax ;wynik (początek linii)do bx
- kopiujDoBufora:
- cld ; Clear Direction warunek na dodawanie (chcemy oby di i si sie zwiekszały tzn flaga kierunku wyczyszczona umożliwia zwiększanie indeksów)
- mov cx,80 ; licznik kopiowania znaków linii (80 znaków w linii)
- push ds
- pop es
- push ds ; odkładam na stos ponieważ do ds chcę załadować to co jest pod adresem 0b800h
- mov ax,0b800h ; początek obrazu przenoszony na monitor
- mov ds,ax
- mov si,bx ; numer lini w bx
- mov di,offset buffor
- rep movsw ;kopiuje bajty z ds:si do es:di , dodaje +2 do si i di(aby poruszac sie po kolejnych znakach),
- ;zmniejsza cx o 1 (liczbę pozostałych znaków)
- ;Move Data from String to String
- pop ds ;przywracamy adres dla ds
- zaslonLinie:
- ;wyswielenie belki (STOSW przekopiowuje z AX do ES:DI)
- mov ax,0b800h
- mov es,ax
- mov di,bx ; di numer linii
- mov ax,9020h ;w ah kolor ASCII bajt znaku (spacja)
- mov cx,80 ;licznik
- rep stosw ;wyswietlanie spacji w linii
- ;stos words
- opoznienie:
- ;opoznienie czasowe (CX i DX razem) dziala ale niczego nie może być w CX dlatego uzyto petli zeby kilka razy uzyc pewnego DX
- mov ah,86h
- mov cx,16 ;(opoznienie 1s)
- xor dx,dx
- int 15h
- przywrocZBufora:
- ;odtworzenie zawartosci linii (DS:SI do ES:DI , DS wskazuje już dane razem z zapamiętanym łańcuchem (ten pop DS),
- ;ES wskazuje już początek okienka (przypisano w wyswietlaniu belki)
- mov cx,80
- mov ax,0b800h
- mov es,ax
- mov si,offset buffor
- mov di,bx
- rep movsw ;peniesienie z ds:si do es:di (przesuniecie ds o si)
- opoznienie2:
- mov ah,86h
- mov cx,16
- xor dx,dx
- int 15h
- czyWcisnietyPrzycisk:
- ;sprawdzenie czy wcisnieto przycisk
- mov ah,1h ;Sprawdza, czy znak jest w buforze (jezeli tak flaga zera jest czyszczona)
- int 16h
- jz petlaProgramu
- koniec:
- mov ah,4Ch
- mov al,0h
- int 21h
- Program ends
- dane segment
- losowa db 0 ;wygenerowana liczba
- losowaLinia db 0 ;losowa
- buffor DB 160 dup(?) ;zawartość belki
- losowanie db 19, 10, 3, 2, 2, 12, 7, 21, 21, 8, 13, 10, 3, 2, 6, 2, 9, 1, 10, 0, 24, 13, 24, 10, 20, 19, 1, 1, 7, 20, 2, 20, 13, 14, 20, 14, 13, 13, 17, 5, 20, 19, 6, 13, 17, 24, 15, 15, 17, 7, 1, 14, 12, 12, 24, 6, 0, 15, 17, 4, 3, 10, 1, 2, 3, 11, 9, 7, 18, 23, 16, 9, 2, 13, 8, 0, 14, 22, 11, 2, 7, 20, 9, 5, 4, 11, 6, 24, 22, 17, 24, 5, 22, 12, 13, 23, 20, 23, 22, 13, 12, 20, 17, 8, 14, 8, 4, 1, 18, 10, 8, 21, 4, 17, 6, 19, 14, 2, 17, 2, 7, 7, 13, 24, 10, 23, 5, 22, 3, 1, 19, 14, 15, 11, 23, 17, 4, 17, 3, 8, 10, 13, 21, 10, 15, 23, 3, 1, 24, 22, 8, 9, 7, 18, 12, 12, 8, 6, 23, 11, 17, 3, 11, 2, 6, 7, 8, 11, 9, 12, 17, 19, 19, 3, 11, 9, 19, 15, 23, 13, 24, 6, 10, 0, 21, 17, 23, 10, 0, 12, 6, 13, 20, 15, 0, 3, 4, 16, 13, 4, 12, 24, 2, 16, 21, 20, 13, 18, 2, 13, 10, 13, 16, 13, 13, 6, 21, 20, 10, 21, 10, 11, 15, 2, 10, 11, 0, 3, 16, 0, 2, 7, 12, 2, 0, 16, 8, 15, 12, 14, 7, 7, 8, 9, 22, 10, 22, 21, 4, 12, 8, 17, 16, 18, 4, 11 ;256 liczb od 0 do 24 ponieważ mamy 25 wierszy
- dane ends
- stosik segment
- dw 100h dup(0)
- szczyt label word
- stosik ends
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement