Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Progr           segment
  2.                 assume cs:Progr, ds:dane, ss:stosik
  3.  
  4. start:          mov ax,dane
  5.                 mov ds,ax
  6.                 mov ax,stosik
  7.                 mov ss,ax
  8.                 mov sp,offset szczyt
  9.                
  10. pocz:      
  11.  
  12.  
  13.  
  14.  
  15.                 ;Losowanie
  16.      
  17.                 mov ah,2ch             
  18.                 ;zapisuje czas do rejestrów cx i dx
  19.                 int 21h
  20.                 xor ax,ax      
  21.                 mov al,dl              
  22.                 ;milisekundy z rejestru dl przenosimy do al
  23.                 mov cx,25              
  24.                 xor dx,dx
  25.                 div cx                 
  26.                 ;dzielenie przez 25, aby otrzymac reszty(z przedzialu 0-24) w dx
  27.                 mov ax,160             
  28.                 mul dx
  29.                 ;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)
  30.                 mov si,ax              
  31.                 mov bx,ax                  
  32.                 ;wynik do si do aktualnego uzywania i do bx dla wielokrotnego uzywania
  33.                
  34.                
  35.                
  36.                
  37.                
  38.                
  39.                
  40.                
  41.                
  42.                 ;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
  43.                 ;ds będzie miało za zadanie pamiętać adres pierwszej linii, zaś es będzie zawierało adres ostatniej linii
  44.                
  45.                
  46.                
  47.                 push ds                
  48.                 ;przesylamy adres segmentu ds na stos
  49.                 mov ax,ds                  
  50.                 mov es,ax              
  51.                 ;przypisanie segmentowi es adresu ds, teraz bedzie mozna uzywac es do danych i MOVSW
  52.                 mov ax,0b800h          
  53.                 mov ds,ax              
  54.                 ;przypisanie ds adresu poczatku okienka
  55.                 mov di,offset kopia         ;do di offset do lancucha do ktorego bedziemy przenosic znaki z ekranu
  56.                 mov cx,80              
  57.                 rep MOVSW              
  58.                 ;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
  59.                 pop ds                 
  60.                 ;przywracamy adres dla ds ze stosu
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.                 ;Wyświetlanie lini (STOSW przekopiowuje z AX do ES:DI)
  69.                
  70.                 mov ax,0b800h          
  71.                 mov es,ax              
  72.                 ;do segmentu es przypisujemy adres poczatku okienka
  73.                 mov di,bx              
  74.                 ;do di przesyłamy wylosowane przesunięcie
  75.                 mov ah,42h             
  76.                 mov al,'x'             
  77.                 ;w ah ładujemy  kolor (4-czerwone tło lub 2-zielone znaczki) a  w al dany znak
  78.                 mov cx,80              
  79.                 rep STOSW              
  80.                 ;cx ustawiamy na 80 i wyświetlamy kolorowy znak 80 razy przechodząc  jeden dalej przy każdym przejściu pętli
  81.                
  82.                
  83.                
  84.                
  85.                
  86.                
  87.                 ;Wstawianie opoznienia o 1sek
  88.                
  89.                 mov CX,16              
  90.                 xor dx,dx
  91.                 mov ax,8600h
  92.                 int 15h
  93.  
  94.                
  95.                 ;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)
  96.                
  97.                 mov si,offset kopia
  98.                 mov di,bx              
  99.                 ;przesunięcie
  100.                 mov cx,80              
  101.                 ;licznik
  102.                 rep MOVSW
  103.                
  104.                
  105.                
  106.                
  107.                 ;Klikniecie dowolnego klawisza powodue koniec programu
  108.                 mov ah,1h
  109.                 int 16h
  110.                 jz pocz
  111.                        
  112. koniec:
  113.                 mov ah,7
  114.                 int 21h
  115.                 mov ah,4ch
  116.                 mov al,0
  117.                 int 21h
  118.  
  119. Progr           ends
  120.  
  121. dane            segment
  122.    
  123. kopia         dw 80 dup($)    
  124.  
  125. dane            ends
  126.  
  127. stosik          segment
  128.  
  129.                 dw 100h dup(0)
  130.  
  131. szczyt          Label word
  132.  
  133. stosik          ends
  134.  
  135. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement