Advertisement
dariahinz

ako konwersja laby

Oct 30th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 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 _MessageBoxW@16 : PROC
  7. extern _MessageBoxA@16 : PROC
  8. extern __write : PROC ; (dwa znaki podkreślenia)
  9. extern __read : PROC ; (dwa znaki podkreślenia)
  10. public _main
  11. .data
  12. tytul_uni dw 't','e','s','t', 0
  13. tytul_win db "Test 2 ",0
  14. tekst_pocz db 10, 'Proszę napisać jakiś tekst '
  15. db 'i nacisnac Enter', 10
  16. koniec_t db ?
  17. magazyn db 80 dup (?)
  18. nowa_linia db 10
  19. liczba_znakow dd ?
  20. magazyn2 dw 180 dup (?)
  21.  
  22. latin db 0A5H, 0A4H, 86H, 8FH, 0A9H, 0A8H, 88H, 9DH, 0E4H, 0E3H, 0A2H, 0E0H, 98H, 97H, 0ABH, 8DH, 0BEH, 0BDH ; ąĄćĆęĘłŁńŃóÓśŚźŹżŻ
  23. win1250 db 0A5H, 0A5H, 0C6H, 0C6H, 0CAH, 0CAH, 0A3H, 0A3H, 0D1H, 0D1H, 0D3H, 0D3H, 8CH, 8CH, 8FH, 8FH, 0AFH, 0AFH ; ąĄćĆęĘłŁńŃóÓśŚźŹżŻ
  24. unicode dw 0104H, 0104H, 0106H, 0106H, 0118H, 0118H, 0141H, 0141H, 0143H, 0143H ; ąĄćĆęĘłŁńŃ
  25. dw 00D3H, 00D3H, 015AH, 015AH, 0179H, 0179H, 017BH, 017BH ; óÓśŚźŹżŻ
  26.  
  27.  
  28.  
  29. .code
  30. _main:
  31. ; wyświetlenie tekstu informacyjnego
  32. ; liczba znaków tekstu
  33.  
  34. mov ecx,(OFFSET koniec_t) - (OFFSET tekst_pocz)
  35. push ecx
  36. push OFFSET tekst_pocz
  37. push 1 ; nr urządzenia (tu: ekran - nr 1)
  38.  
  39. call __write ; wyświetlenie tekstu początkowego
  40.  
  41. add esp, 12 ; usuniecie parametrów ze stosu
  42. ; czytanie wiersza z klawiatury
  43. push 80 ; maksymalna liczba znaków
  44. push OFFSET magazyn
  45. push 0 ; nr urządzenia (tu: klawiatura - nr 0)
  46. call __read ; czytanie znaków z klawiatury
  47. add esp, 12 ; usuniecie parametrów ze stosu
  48. ; kody ASCII napisanego tekstu zostały wprowadzone
  49. ; do obszaru 'magazyn'
  50. ; funkcja read wpisuje do rejestru EAX liczbę
  51. ; wprowadzonych znaków
  52. mov liczba_znakow, eax
  53. ; rejestr ECX pełni rolę licznika obiegów pętli
  54.  
  55. mov ecx, eax
  56. mov ebx, 0 ; indeks początkowy
  57. mov ebp, 0 ;indeks początkowy
  58.  
  59. ptl:
  60.  
  61. mov dl, magazyn[ebx] ; pobranie kolejnego znaku
  62. mov dh, 0
  63. cmp dl, 'a'
  64. jb dalej ; skok, gdy znak nie wymaga zamiany
  65.  
  66. ;wyszukiwanie polskich znaków
  67. mov ebp,0
  68. ptl2:
  69.  
  70. cmp dl, latin[ebp]
  71. jne toNieTenZnak
  72.  
  73. mov dl, win1250[ebp]
  74. mov magazyn[ebx], dl
  75. mov dx, unicode[2*ebp]
  76. mov magazyn2[2*ebx], dx
  77. jmp dalej2
  78.  
  79.  
  80. toNieTenZnak:
  81. inc ebp
  82. cmp ebp, 18
  83. jb ptl2
  84.  
  85.  
  86. cmp dl, 'z'
  87. ja dalej ; skok, gdy znak nie wymaga zamiany
  88. sub dl, 20H ; zamiana na wielkie litery
  89.  
  90. ; odesłanie znaku do pamięci
  91. dalej:
  92. mov magazyn[ebx], dl
  93. mov magazyn2[2*ebx], dx
  94. dalej2: inc ebx ; inkrementacja indeksu
  95. inc ebp
  96. inc ebp
  97. dec ecx
  98. jnz ptl ; sterowanie pętlą
  99.  
  100. ; wyświetlenie przekształconego tekstu
  101.  
  102. push 0
  103. push OFFSET tytul_win
  104. push OFFSET magazyn
  105. push 0
  106. call _MessageBoxA@16 ; wyświetlenie przekształconego tekstu
  107. push 0
  108.  
  109.  
  110. push 0
  111. push OFFSET tytul_uni
  112. push OFFSET magazyn2
  113. push 0
  114. call _MessageBoxW@16 ; wyświetlenie przekształconego tekstu
  115. push 0
  116. call _ExitProcess@4 ; zakończenie
  117. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement