Advertisement
Guest User

na zajeciach

a guest
Oct 27th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. ; wczytywanie i wyświetlanie tekstu wielkimi literami
  2. ; (inne znaki się nie zmieniają)
  3. .686
  4. .model flat
  5. extern _ExitProcess@4 : PROC
  6. extern _MessageBoxA@16 : PROC
  7. extern _MessageBoxW@16 : PROC
  8. extern __write : PROC ; (dwa znaki podkreślenia)
  9. extern __read : PROC ; (dwa znaki podkreślenia)
  10. public _main
  11. .data
  12. tekst_pocz db 10, 'Proszę napisać jakiś tekst '
  13. db 'i nacisnac Enter', 10, 0
  14.  
  15. koniec_t db ? ; wartość nieokreślona
  16. naglowek db 'AKO', 0
  17. magazyn dw 800 dup (0) ;
  18. nowa_linia db 10
  19. liczba_znakow dd ? ; wartość nieokreślona
  20. .code
  21. _main:
  22. ; wyświetlenie tekstu informacyjnego
  23. ; liczba znaków tekstu
  24. mov ecx,(OFFSET koniec_t) - (OFFSET tekst_pocz)
  25. push ecx
  26. push OFFSET tekst_pocz ; adres tekstu
  27. push 1 ; nr urządzenia (tu: ekran - nr 1)
  28. call __write ; wyświetlenie tekstu początkowego
  29. add esp, 12 ; usuniecie parametrów ze stosu
  30. ; czytanie wiersza z klawiatury
  31. push 80 ; maksymalna liczba znaków
  32. push OFFSET magazyn
  33. push 0 ; nr urządzenia (tu: klawiatura - nr 0)
  34. call __read ; czytanie znaków z klawiatury
  35. add esp, 12 ; usuniecie parametrów ze stosu
  36. ; kody ASCII napisanego tekstu zostały wprowadzone
  37. ; do obszaru 'magazyn'
  38. ; funkcja read wpisuje do rejestru EAX liczbę
  39. ; wprowadzonych znaków
  40. mov liczba_znakow, eax
  41. ; rejestr ECX pełni rolę licznika obiegów pętli
  42.  
  43. mov ecx, eax
  44. mov ebx, 0
  45. mov bp, 0 ; indeks początkowy
  46. ptl: mov dx, magazyn[bp] ; pobranie kolejnego znaku
  47.  
  48.  
  49. cmp dl, 0A5H ; ą
  50. je zamiana_a ;
  51. cmp dl, 086H ; ć
  52. je zamiana_c ;
  53. cmp dl, 0A9H ; ę
  54. je zamiana_e ;
  55. cmp dl, 88H ; ł
  56. je zamiana_l ;
  57. cmp dl, 0E4H ; ń
  58. je zamiana_n ;
  59. cmp dl, 0A2H ; ó
  60. je zamiana_o ;
  61. cmp dl,98H ; ś
  62. je zamiana_s ;
  63. cmp dl, 0ABH ; ź
  64. je zamiana_ziet
  65. cmp dl, 0BEH ; ż
  66. je zamiana_zet
  67.  
  68. cmp dl, 'a'
  69. jb dalej ; skok, gdy znak nie wymaga zamiany
  70. cmp dl, 'z'
  71. ja dalej ; skok, gdy znak nie wymaga zamiany
  72. sub dx, 20H ; zamiana na wielkie litery
  73.  
  74. jmp zamagazynowanie
  75. zamiana_a: mov dx, 105H
  76. jmp zamagazynowanie
  77. zamiana_c: mov dx, 107H
  78. jmp zamagazynowanie
  79. zamiana_e: mov dx, 119H
  80. jmp zamagazynowanie
  81. zamiana_l: mov dx, 142H
  82. jmp zamagazynowanie
  83. zamiana_n: mov dx, 144H
  84. jmp zamagazynowanie
  85. zamiana_o: mov dx, 0F3H
  86. jmp zamagazynowanie
  87. zamiana_s: mov dx, 15BH
  88. jmp zamagazynowanie
  89. zamiana_ziet: mov dx, 17AH
  90. jmp zamagazynowanie
  91. zamiana_zet: mov dx, 17CH
  92. jmp zamagazynowanie
  93. ; odesłanie znaku do pamięci
  94. zamagazynowanie: mov magazyn[ebx], dx
  95. dalej: inc ebx ; inkrementacja indeksu
  96. inc ebx
  97. inc bp
  98. dec ecx
  99. jnz ptl ; sterowanie pętlą
  100. ; wyświetlenie przekształconego tekstu
  101. mov dx, 0
  102. mov magazyn[ebx], dx
  103.  
  104. push liczba_znakow
  105. push OFFSET magazyn
  106. push 1
  107. call __write ; wyświetlenie przekształconego tekstu
  108. add esp, 12 ; usuniecie parametrów ze stosu
  109. push 0
  110. push OFFSET naglowek
  111. push OFFSET magazyn
  112. push 0
  113. call _MessageBoxW@16
  114. push 0
  115. call _ExitProcess@4 ; zakończenie programu
  116. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement