Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. Program segment
  2.  
  3. assume cs:Program,ds:dane,ss:stosik
  4.  
  5. Start:
  6. mov ax,dane
  7. mov ds,ax ;wskazuje 16 bitów adresu komórek pamięci które zawierają dane, głównie zmienne programu
  8. mov ax,stosik
  9. mov ss,ax
  10. mov sp,offset szczyt
  11.  
  12. xor ax,ax
  13. xor dx,dx ;00H odczyt zegara systemowego
  14. int 1ah ;Read System-Timer Time Counter ;przerwanie zegarowe ;impusly co 55 milisekund zliczane od poczatku uruchomienia PC
  15. mov rand,dl
  16. xor ax,ax
  17. xor dx,dx
  18.  
  19.  
  20. programLoop:
  21.  
  22. lineRandomising:
  23. ;wybieranie linii która zostanie zamaskowana
  24.  
  25. xor ax,ax
  26. inc rand ;wylosowana linia zwiekszona o 1 (działanie pętli random)
  27. mov al,rand
  28. mov si,ax ;16 bitowy rejestr adresacji , indeksowy źródła danych
  29. mov dl,losowanie(si) ;nr linii którą losuje
  30. mov randLine,dl
  31.  
  32. xor ax,ax
  33.  
  34. mov al,160
  35. mul randLine ;mnozenie wylosowanej liczby razy 160, zeby być na poczatku linii- 80 znakow w lini,
  36. ;kazdy zajmuje 2 bajty, (poczatek drugiej linii = 81 znak) -> ax
  37. mov bx,ax ;wynik (początek linii)do bx
  38.  
  39. kopiowanieDoBufora:
  40.  
  41. cld ; Clear Direction warunek na dodawanie (chcemy oby di i si sie zwiekszały -> flaga kierunku wyczyszczona umożliwia zwiększanie indeksów)
  42. mov cx,80 ; licznik kopiowania znaków linii (80 znaków w linii)
  43. push ds ; początek segment danych (pierwsze 5 linii programu)
  44. pop es
  45. push ds ; odkładam na stos ponieważ do ds chcę załadować to co jest pod adresem 0b800h
  46. mov ax,0b800h ; początek obrazu przenoszony na monitor
  47. mov ds,ax
  48. mov si,bx ; numer lini w bx
  49. mov di,offset buffor
  50. rep movsw ;kopiuje bajty z ds:si do es:di , dodaje +2 do si i di(aby poruszac sie po kolejnych znakach),
  51. ;zmniejsza cx o 1 (liczbę pozostałych znaków)
  52. ;Move Data from String to String
  53. pop ds ;przywracamy adres dla ds
  54.  
  55. wyswietlenieBelki:
  56. ;wyswielenie belki (STOSW przekopiowuje z AX do ES:DI)
  57.  
  58. mov ax,0b800h
  59. mov es,ax ;do es adres poczatku okienka
  60. mov di,bx ;do di numer linii
  61. mov ax,2020h ;w ah kolor (4-czerwone tło lub 2-zielone tło, 0-czarny znak) ATTP bajt atrybutu
  62. ;mov al,20h ;ASCII bajt znaku (spacja)
  63. mov cx,80 ;licznik
  64. rep stosw ;wyswietlanie spacji w linii
  65. ;stos words
  66.  
  67. opoznienie:
  68. ;opoznienie czasowe (CX i DX razem) dziala ale niczego nie może być w CX dlatego uzyto petli zeby kilka razy uzyc pewnego DX
  69.  
  70. mov ah,86h
  71. mov cx,8 ;(opoznienie 0,5s)
  72. xor dx,dx
  73. int 15h
  74.  
  75.  
  76. przywrocenieZBufora:
  77. ;odtworzenie zawartosci linii (DS:SI do ES:DI , DS wskazuje już dane razem z zapamiętanym łańcuchem (ten pop DS),
  78. ;ES wskazuje już początek okienka (przypisano w wyswietlaniu belki)
  79.  
  80. mov cx,80
  81. mov ax,0b800h
  82. mov es,ax
  83. mov si,offset buffor
  84. mov di,bx
  85. rep movsw ;peniesienie z ds:si do es:di (przesuniecie ds o si)
  86.  
  87. opoznienie2:
  88. mov ah,86h
  89. mov cx,8
  90. xor dx,dx
  91. int 15h
  92.  
  93. czyKoniec:
  94. ;sprawdzenie czy wcisnieto przycisk
  95.  
  96. mov ah,1h ;Sprawdza, czy znak jest w buforze (tak flaga zera jest czyszczona)
  97. int 16h
  98. jz programLoop
  99.  
  100. koniec:
  101. mov ah,4Ch
  102. mov al,0h
  103. int 21h
  104.  
  105. Program ends
  106.  
  107. dane segment
  108.  
  109. rand db 0 ;wygenerowana liczba
  110. randLine db 0 ;rand
  111. buffor DB 160 dup(?) ;zawartość belki
  112. 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
  113. ;256 liczb od 0 do 24 ponieważ mamy 25 wierszy
  114.  
  115. dane ends
  116.  
  117. stosik segment
  118.  
  119. dw 100h dup(0)
  120.  
  121. szczyt label word
  122.  
  123. stosik ends
  124.  
  125. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement