Advertisement
Talar97

[AK] Przysłanianie

Jan 8th, 2019
344
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. pobierzCzas:    call ustawRej
  11.                 int 1aH               ;przerwanie, które do cx i dx wrzuca tick count
  12.                 mov numb, dl          ;numb <- 1bajt ticków (0-255)
  13.  
  14. losujWiersz:    call ustawRej
  15.                 mov al, numb          ;numb stanowi nasz indeks
  16.                 mov si, ax            ;si <- indeks
  17.                 mov dl, random(si)    ;wyciągnięcie 'randomowej' liczby z tablicy
  18.                 mov numb, dl          ;numb <- random(si)
  19.  
  20. pozycja:        mov ax, 160           ;160B ma cały wiersz (80 znaków, 1 znak = 2B)
  21.                 mul numb              ;mnożenie numb * 160 (żeby okreslić pozycję wylosowanej linii)
  22.                 mov bx, ax            ;bx <- przemnożony numb
  23.  
  24. kopiujWiersz:   cld                   ;zerowanie znacznika kierunku. Potrzebne, żeby SI i DI zwiększało się a nie zmniejszało o 1 dla 8bit i o 2 dla 16bit operacji
  25.                 push ds               ;wrzucamy ds na stos, bo potem go modyfikujemy
  26.                 push ds               ;?? nie wiem tylko czemu dwa razy to robimy
  27.                 pop es                ;es ze stosu (extra segment), do przechowywania zawartości zasłoniętych linii
  28.                 mov di, 0             ;di <- 0 zerujemy di, bo potem movsw z tego korzysta
  29.                 mov ax, 0B800H        ;wartosc do ax, bo do ds nie mozna bezposrednio
  30.                 mov ds, ax            ;ds <- 0B800H, poczatek konsoli chyba (ds:si)
  31.                 mov si, bx            ;si <- bx, bx to numb * 160, wskazuje pozycje wylosowanej linii
  32.                 mov cx, 80            ;80 znaków na jeden wiersz (do repa potrzebne, zeby sie wykonał 80 razy)
  33.                 rep movsw             ;wykonanie cx razy (80) opepracji movsw, przeniesienie znaku z ds:si do es:di
  34.                                       ;instrukcja przepisuje dane wskazywane przez DS:SI pod adres ES:DI, a następnie modyfikują rejestry indeksowe.
  35.  
  36.                 pop ds                ;??zdjęcie ze stosu ds (tylko czemu raz skoro odłożyliśmy go 2 razy?)
  37.                 mov es, ax            ;es <- 0B800H - potrzebne do przysłaniania
  38.                 mov si, bx            ;si <- bx, czyli numb * 160, przesunięcie o tyle bajtów ile linii wylosowanych
  39.  
  40.                 mov cx, 80
  41. przyslaniaj:    mov byte ptr es:[si], 32            ;Przysłaniamy od  es:si (wczesniej było es <- 0B800H). 32 - znak spacji, bez tego są zera spacja, si określa pozycje wylosowanej linii
  42.                 mov byte ptr es:[si+1], 10101010B   ;kolor tła
  43.                 add si, 2                           ;si+=2
  44.                 loop przyslaniaj                    ;loop 80 razy, zeby zasłonić wszystkie 80 znaków
  45.  
  46. czekaj:         mov cx, 0FH           ;czas do int 15H
  47.                 mov dx, 00H           ;czas do int 15H
  48.                 mov ax, 0             ;
  49.                 mov ah, 86H           ;int 15H 86H (ah) przyjmuje cx i dx do odliczania czasu
  50.                 int 15H
  51.  
  52.  
  53. przywroc:       mov si, offset line   ;si <- offset do zmiennej line
  54.                 mov di, bx            ;di <- bx w bx cały czas jest 160*nr linii
  55.                 mov cx, 80            ;iterator do repa
  56.                 rep movsw             ;?? ds:si -> es:di x80 - ale jak to konkretnie działa, ze to sciaga?
  57.                 jmp pobierzCzas
  58.  
  59. exit:           mov     ah, 4cH
  60.                 mov     al, 0
  61.                 int     21H
  62.  
  63. ustawRej:       mov ax, 0
  64.                 mov bx, 0
  65.                 mov cx, 0
  66.                 mov dx, 0
  67.                 ret
  68.  
  69. Progr           ends
  70.  
  71. dane            segment
  72.                 line db 160 dup(0)
  73.                 random db 18, 21, 10, 4, 2, 19, 2, 5, 7, 10, 16, 11, 7, 21, 23, 17, 8, 19, 23, 24, 21, 2, 1, 22, 14, 11, 11, 21, 0, 7, 14, 13, 3, 5, 23, 7, 6, 10, 11, 17, 6, 21, 10, 6, 12, 4, 5, 19, 20, 8, 4, 20, 23, 8, 13, 23, 23, 15, 21, 5, 8, 10, 9, 6, 0, 11, 7, 16, 2, 22, 11, 20, 9, 21, 15, 4, 13, 19, 6, 20, 20, 4, 7, 22, 11, 16, 12, 3, 12, 0, 3, 17, 11, 12, 14, 24, 5, 19, 4, 19, 15, 4, 10, 2, 15, 24, 6, 3, 8, 16, 16, 8, 21, 19, 3, 0, 6, 21, 12, 12, 11, 13, 11, 24, 3, 24, 0, 4, 0, 2, 9, 23, 16, 13, 0, 4, 15, 10, 1, 23, 13, 12, 17, 8, 4, 4, 24, 2, 15, 10, 13, 3, 6, 18, 8, 16, 10, 16, 2, 11, 1, 11, 22, 20, 0, 10, 14, 6, 18, 16, 24, 3, 19, 20, 7, 9, 11, 16, 12, 13, 8, 23, 23, 15, 19, 0, 11, 22, 16, 23, 13, 11, 2, 1, 23, 4, 13, 11, 2, 23, 19, 22, 13, 9, 15, 11, 14, 10, 1, 12, 12, 5, 20, 7, 23, 21, 1, 14, 7, 16, 5, 24, 16, 16, 7, 10, 7, 16, 4, 14, 7, 14, 3, 14, 13, 7, 3, 21, 23, 19, 7, 5, 24, 24, 20, 14, 11, 2, 19, 0, 0, 9, 6, 1, 15, 9
  74.                 numb db 0
  75. dane            ends
  76.  
  77. stosik          segment
  78.                 dw    100h dup(0)
  79. szczyt          Label word
  80. stosik          ends
  81.  
  82. end start
  83.  
  84. /---------------------------/
  85. Bez opisów
  86. /--------------------------/
  87.  
  88. Progr           segment
  89.                 assume  cs:Progr, ds:dane, ss:stosik
  90.  
  91. start:          mov ax, dane
  92.                 mov ds, ax
  93.                 mov ax, stosik
  94.                 mov ss, ax
  95.                 mov sp, offset szczyt
  96.  
  97. pobierzCzas:    call ustawRej
  98.                 int 1aH              
  99.                 mov numb, dl          
  100.  
  101. losujWiersz:    call ustawRej
  102.                 mov al, numb          
  103.                 mov si, ax            
  104.                 mov dl, random(si)    
  105.                 mov numb, dl          
  106.  
  107. pozycja:        mov ax, 160          
  108.                 mul numb            
  109.                 mov bx, ax            
  110.  
  111. kopiujWiersz:   cld                  
  112.                 push ds              
  113.                 push ds              
  114.                 pop es                
  115.                 mov di, 0            
  116.                 mov ax, 0B800H        
  117.                 mov ds, ax            
  118.                 mov si, bx            
  119.                 mov cx, 80            
  120.                 rep movsw            
  121.  
  122.                 pop ds                
  123.                 mov es, ax            
  124.                 mov di, bx          
  125.  
  126.                 mov cx, 80
  127. przyslaniaj:    mov ah, 00010000B
  128.                 mov al, 0H                      
  129.                 rep stosw                  
  130.  
  131. czekaj:         mov cx, 0FH          
  132.                 mov dx, 00H          
  133.                 mov ax, 0            
  134.                 mov ah, 86H          
  135.                 int 15H
  136.  
  137.  
  138. przywroc:       mov si, offset line  
  139.                 mov di, bx            
  140.                 mov cx, 80            
  141.                 rep movsw            
  142.    
  143. czyExit:        mov ah, 01H
  144.                 int 16H                
  145.                 jnz exit
  146.                 jmp pobierzCzas
  147.  
  148. exit:           mov ah, 4cH
  149.                 mov al, 0
  150.                 int 21H
  151.  
  152. ustawRej:       mov ax, 0
  153.                 mov bx, 0
  154.                 mov cx, 0
  155.                 mov dx, 0
  156.                 ret
  157.  
  158. Progr           ends
  159.  
  160. dane            segment
  161.                 line db 160 dup(0)
  162.                 random db 18, 21, 10, 4, 2, 19, 2, 5, 7, 10, 16, 11, 7, 21, 23, 17, 8, 19, 23, 24, 21, 2, 1, 22, 14, 11, 11, 21, 0, 7, 14, 13, 3, 5, 23, 7, 6, 10, 11, 17, 6, 21, 10, 6, 12, 4, 5, 19, 20, 8, 4, 20, 23, 8, 13, 23, 23, 15, 21, 5, 8, 10, 9, 6, 0, 11, 7, 16, 2, 22, 11, 20, 9, 21, 15, 4, 13, 19, 6, 20, 20, 4, 7, 22, 11, 16, 12, 3, 12, 0, 3, 17, 11, 12, 14, 24, 5, 19, 4, 19, 15, 4, 10, 2, 15, 24, 6, 3, 8, 16, 16, 8, 21, 19, 3, 0, 6, 21, 12, 12, 11, 13, 11, 24, 3, 24, 0, 4, 0, 2, 9, 23, 16, 13, 0, 4, 15, 10, 1, 23, 13, 12, 17, 8, 4, 4, 24, 2, 15, 10, 13, 3, 6, 18, 8, 16, 10, 16, 2, 11, 1, 11, 22, 20, 0, 10, 14, 6, 18, 16, 24, 3, 19, 20, 7, 9, 11, 16, 12, 13, 8, 23, 23, 15, 19, 0, 11, 22, 16, 23, 13, 11, 2, 1, 23, 4, 13, 11, 2, 23, 19, 22, 13, 9, 15, 11, 14, 10, 1, 12, 12, 5, 20, 7, 23, 21, 1, 14, 7, 16, 5, 24, 16, 16, 7, 10, 7, 16, 4, 14, 7, 14, 3, 14, 13, 7, 3, 21, 23, 19, 7, 5, 24, 24, 20, 14, 11, 2, 19, 0, 0, 9, 6, 1, 15, 9
  163.                 numb db 0
  164. dane            ends
  165.  
  166. stosik          segment
  167.                 dw    100h dup(0)
  168. szczyt          Label word
  169. stosik          ends
  170.  
  171. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement