Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. .686
  2. .model flat
  3.  
  4. extern _ExitProcess@4 : PROC
  5. extern __write : PROC
  6. extern __read : PROC
  7. public _main
  8.  
  9. .data
  10. dekoder db'0123456789ABCDEF'
  11. znaki db 12 dup(?)
  12. obszar db 12 dup(?)
  13. dziesiec dd 10 ; mnoznik
  14. .code
  15.  
  16. wyswietl_EAX_hex PROC
  17. ; wy?wietlanie zawarto?ci rejestru EAX
  18. ; w postaci liczby szesnastkowej
  19. pusha ; przechowanie rejestrów
  20.  
  21. ; rezerwacja 12 bajtów na stosie (poprzez zmniejszenie
  22. ; rejestru ESP) przeznaczonych na tymczasowe przechowanie
  23. ; cyfr szesnastkowych wy?wietlanej liczby
  24. sub esp, 12
  25. mov edi, esp ; adres zarezerwowanego obszaru
  26. ; pami?ci
  27. ; przygotowanie konwersji
  28. mov ecx, 8 ; liczba obiegów p?tli konwersji
  29. mov esi, 1 ; indeks pocz?tkowy u?ywany przy
  30. ; zapisie cyfr
  31. ; p?tla konwersji
  32. ptl3hex:
  33. ; przesuni?cie cykliczne (obrót) rejestru EAX o 4 bity w lewo
  34. ; w szczególno?ci, w pierwszym obiegu p?tli bity nr 31 - 28
  35. ; rejestru EAX zostan? przesuni?te na pozycje 3 - 0
  36. rol eax, 4
  37. ; wyodr?bnienie 4 najm?odszych bitów i odczytanie z tablicy
  38. ; 'dekoder' odpowiadaj?cej im cyfry w zapisie szesnastkowym
  39. mov ebx, eax ; kopiowanie EAX do EBX
  40. and ebx, 0000000FH ; zerowanie bitów 31 - 4 rej.EBX
  41. mov dl, dekoder[ebx] ; pobranie cyfry z tablicy
  42. ; przes?anie cyfry do obszaru roboczego
  43. mov [edi][esi], dl
  44. inc esi ;inkrementacja modyfikatora
  45. loop ptl3hex ; sterowanie p?tl?
  46.  
  47. ; wpisanie znaku nowego wiersza przed i po cyfrach
  48. mov byte PTR [edi][0], 10
  49. mov byte PTR [edi][9], 10
  50. ; wy?wietlenie przygotowanych cyfr
  51.  
  52. mov esi, 8
  53. popraw_zera:
  54. mov al, 30H
  55. cmp [edi][esi], al
  56. je zamien_na_spacje
  57. wroc:
  58. dec esi
  59. cmp esi, 0
  60. je dalej
  61. jmp popraw_zera
  62.  
  63. zamien_na_spacje:
  64. mov al, 20H
  65. mov [edi][esi], al
  66. jmp wroc
  67. dalej:
  68. push 10 ; 8 cyfr + 2 znaki nowego wiersza
  69. push edi ; adres obszaru roboczego
  70. push 1 ; nr urz?dzenia (tu: ekran)
  71. call __write ; wy?wietlenie
  72. ; usuni?cie ze stosu 24 bajtów, w tym 12 bajtów zapisanych
  73. ; przez 3 rozkazy push przed rozkazem call
  74. ; i 12 bajtów zarezerwowanych na pocz?tku podprogramu
  75. add esp, 24
  76. popa ; odtworzenie rejestrów
  77. ret ; powrót z podprogramu
  78. wyswietl_EAX_hex ENDP
  79.  
  80.  
  81. wyswietl_EAX PROC
  82. mov esi, 10
  83. mov ebx, 10
  84. konwersja:
  85. mov edx, 0
  86. div ebx
  87. add dl, 30H
  88. mov znaki [esi], dl
  89. dec esi
  90. cmp eax, 0
  91. jne konwersja
  92.  
  93. wypeln:
  94. or esi, esi
  95. jz wyswietl
  96. mov byte PTR znaki [esi], 20H
  97. dec esi
  98. jmp wypeln
  99.  
  100. wyswietl:
  101. mov byte PTR znaki [0], 0AH
  102. mov byte PTR znaki [11], 0AH
  103. push dword PTR 12
  104. push dword PTR OFFSET znaki
  105. push dword PTR 1
  106. call __write
  107. add esp, 12
  108. ret
  109. wyswietl_EAX ENDP
  110. _wczytaj_do_eax PROC
  111. push ebx
  112. push ecx
  113. push edx
  114.  
  115. push dword PTR 12
  116. push dword PTR OFFSET obszar ; adres obszaru pami?ci
  117. push dword PTR 0; numer urz?dzenia (0 dla klawiatury)
  118. call __read ; odczytywanie znaków z klawiatury
  119. add esp, 12 ; usuni?cie parametrów ze stosu
  120.  
  121.  
  122. ; bie??ca warto?? przekszta?canej liczby przechowywana jest
  123. ; w rejestrze EAX; przyjmujemy 0 jako warto?? pocz?tkow?
  124. mov eax, 0
  125. mov ebx, OFFSET obszar ; adres obszaru ze znakami
  126.  
  127. pobieraj_znaki:
  128. mov cl, [ebx] ; pobranie kolejnej cyfry w kodzie
  129. ; ASCII
  130. inc ebx ; zwi?kszenie indeksu
  131. cmp cl,10 ; sprawdzenie czy naci?ni?to Enter
  132. je byl_enter ; skok, gdy naci?ni?to Enter
  133. sub cl, 30H ; zamiana kodu ASCII na warto?? cyfry
  134. movzx ecx, cl ; przechowanie warto?ci cyfry w
  135. ; rejestrze ECX
  136. ; mno?enie wcze?niej obliczonej warto?ci razy 10
  137. mul dword PTR dziesiec
  138. add eax, ecx ; dodanie ostatnio odczytanej cyfry
  139. jmp pobieraj_znaki ; skok na pocz?tek p?tli
  140.  
  141. byl_enter:
  142. NOP
  143. pop ebx
  144. pop ecx
  145. pop edx
  146. ret
  147. _wczytaj_do_eax ENDP
  148. _main PROC
  149. call _wczytaj_do_eax
  150. call wyswietl_EAX_hex
  151.  
  152.  
  153. push dword ptr 0
  154. call _ExitProcess@4
  155. _main ENDP
  156. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement