Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Progr segment
- assume cs:Progr, ds:dane, ss:stosik
- start: mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- pocz:
- ;Losowanie
- mov ah,2ch
- ;zapisuje czas do rejestrów cx i dx
- int 21h
- xor ax,ax
- mov al,dl
- ;milisekundy z rejestru dl przenosimy do al
- mov cx,25
- xor dx,dx
- div cx
- ;dzielenie przez 25, aby otrzymac reszty(z przedzialu 0-24) w dx
- mov ax,160
- mul dx
- ;mnożymy razy 160 aby całość belki była wyświetlana w jednej linii(jeśli tego nie zrobimy część będzie w jednej linni, część w drugiej)
- mov si,ax
- mov bx,ax
- ;wynik do si do aktualnego uzywania i do bx dla wielokrotnego uzywania
- ;Zapisywanie zawartosci linii (z ds(wskazuje segment w pamięci, gdzie przechowywane są dane):si(offset) do es(segment dodatkowy):di(wzkaźnik indeksowy przeznaczenia danych)) razem logiczny adres , w si juz został wpisany adres poczatku linii
- ;ds będzie miało za zadanie pamiętać adres pierwszej linii, zaś es będzie zawierało adres ostatniej linii
- push ds
- ;przesylamy adres segmentu ds na stos
- mov ax,ds
- mov es,ax
- ;przypisanie segmentowi es adresu ds, teraz bedzie mozna uzywac es do danych i MOVSW
- mov ax,0b800h
- mov ds,ax
- ;przypisanie ds adresu poczatku okienka
- mov di,offset kopia ;do di offset do lancucha do ktorego bedziemy przenosic znaki z ekranu
- mov cx,80
- rep MOVSW
- ;cx ustawiamy na 80, aby wykonac tyle powtorzen, przenosi z ds:si do es:di , dodaje +2 do si i di(wby ruszac sie po kolejnych znakach), zmniejsza cx o 1
- pop ds
- ;przywracamy adres dla ds ze stosu
- ;Wyświetlanie lini (STOSW przekopiowuje z AX do ES:DI)
- mov ax,0b800h
- mov es,ax
- ;do segmentu es przypisujemy adres poczatku okienka
- mov di,bx
- ;do di przesyłamy wylosowane przesunięcie
- mov ah,42h
- mov al,'x'
- ;w ah ładujemy kolor (4-czerwone tło lub 2-zielone znaczki) a w al dany znak
- mov cx,80
- rep STOSW
- ;cx ustawiamy na 80 i wyświetlamy kolorowy znak 80 razy przechodząc jeden dalej przy każdym przejściu pętli
- ;Wstawianie opoznienia o 1sek
- mov CX,16
- xor dx,dx
- mov ax,8600h
- int 15h
- ;Przywracanie zawartosci lini (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 linii)
- mov si,offset kopia
- mov di,bx
- ;przesunięcie
- mov cx,80
- ;licznik
- rep MOVSW
- ;Klikniecie dowolnego klawisza powodue koniec programu
- mov ah,1h
- int 16h
- jz pocz
- koniec:
- mov ah,7
- int 21h
- mov ah,4ch
- mov al,0
- int 21h
- Progr ends
- dane segment
- kopia dw 80 dup($)
- 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