Advertisement
bartus1342

Untitled

Jun 19th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. dane SEGMENT ;segment danych
  2. text db "DEBUG",13,10, '$'
  3. lbin dw 0
  4. lbin2 dw 0 ; do sumy calkowitych
  5. buf_1 db 4 dup (0) ; wpisujemy liczby
  6. buf_2 db 7 dup (0) ; reszta ascii
  7. buf_22 db 7 dup (0) ; calosci ascii
  8. wynik_dziel db 7 dup (0), '$'
  9. suma_tab db 7 dup (0), '$'
  10.  
  11. dane ENDS
  12.  
  13. rozkazy SEGMENT 'CODE' use16 ;segment zawierający rozkazy programu
  14. ASSUME cs:rozkazy, ds:dane
  15. wystartuj:
  16. mov ax, SEG dane
  17. mov ds, ax
  18. mov cx, 4; wpisanie 4 cyfr
  19. mov si, OFFSET buf_1; przenies adres pierwszego elementy tablicy buf_1 do si
  20. wpisz:
  21. mov ah, 1
  22. int 21H; przeczytaj znak z klawiatury
  23. sub al,30h ;zamien na liczbe
  24. mov [si], al; wpisz do tablicy buf_1
  25. inc si; wskaz na nastepny element tablicy
  26. loop wpisz
  27. jmp dalej;po wpisaniu calej liczby skocz dalej
  28. dalej:
  29. mov si, OFFSET buf_1 ;wskaz na pierwsza liczbe w wczytanej tablicy
  30. mov cx, 4 ;4 liczby
  31. mov lbin, 0 ;wyzeruj wynik
  32. zamien:
  33. mov bl, [si] ; bl -> pierwsza liczba z tablicy
  34. mov bh, 0 ;zerowanie rejestru BH
  35. mov ax, 6 ;mnoznik
  36. mul lbin ;mnozenie dotychczas uzyskanego wyniku przez 6
  37. add ax, bx ;dodanie aktualnie wczytanej cyfry
  38. mov lbin, ax ;przesłanie wyniku obliczenia do rejestru SI
  39. inc si ; wskaz na nastepny element
  40. loop zamien
  41. ; po zamianie
  42. mov ax, lbin ; mlodsza czesc dzielnej
  43. mov cx, 6 ; 4 liczby
  44. mov bx, 3 ; dzielnnik
  45. mov si, 6 ;indeks poczatkowy w tablicy buf_2
  46. mov di, 0 ;ilosc cyfr w buf_22
  47. dzielenie:
  48. mov dx, 0 ;zerowanie starszej czesci dzielnej
  49. mov bx, 3
  50. div bx ;dzielenie przez 3; iloraz w AX, reszta w DX
  51. add dx, 30H ;zamiana reszty na kod ASCII
  52. mov buf_2[si], dl ;odesłanie kodu ASCII kolejnej cyfry do tablicy
  53. mov bx, di
  54. mov buf_22[bx],al
  55. dec si ;zmniejszenie indeksu w rejestrze SI o 1
  56. inc di
  57. loop dzielenie ;sterowanie petla
  58. ; po podzieleniu
  59. mov bx, OFFSET buf_22
  60. mov cx,4
  61. sumuj:
  62. mov ax,[bx]
  63. add lbin2,ax
  64. inc bx
  65. loop sumuj
  66. mov ax,lbin2
  67. mov cx,6
  68. mov bx,3
  69. mov si,6
  70. zamien_sume:
  71. mov dx, 0 ;zerowanie starszej czesci dzielnej
  72. div bx ;dzielenie przez 3; iloraz w AX, reszta w DX
  73. add dx,30h
  74. mov wynik_dziel[si], dl
  75. dec si
  76. loop zamien_sume
  77. nowa_linia:
  78. mov dl, 13
  79. mov ah, 2
  80. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  81. mov dl, 10
  82. mov ah, 2
  83. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  84. mov cx, 7
  85. mov bx, OFFSET buf_2 ;wpisanie do rejestru BX obszaru
  86. wyswietl:
  87. mov dl, [bx] ;wpisanie do rejestru DL kodu ASCII
  88. cmp dl,'$'
  89. je nowa_linia2
  90. mov ah, 2
  91. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  92. inc bx ;inkrementacja adresu kolejnego znaku
  93. loop wyswietl
  94. nowa_linia2:
  95. mov dl, 13
  96. mov ah, 2
  97. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  98. mov dl, 10
  99. mov ah, 2
  100. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  101. mov bx, OFFSET wynik_dziel
  102. wyswietl_sume:
  103. mov dl, [bx] ;wpisanie do rejestru DL kodu ASCII
  104. ;kolejnego wyświetlanego znaku
  105. cmp dl,'$'
  106. je nowa_linia3
  107. mov ah, 2
  108. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  109. inc bx ;inkrementacja adresu kolejnego znaku
  110. loop wyswietl_sume
  111. nowa_linia3:
  112. mov dl, 13
  113. mov ah, 2
  114. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  115. mov dl, 10
  116. mov ah, 2
  117. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  118. mov bx, OFFSET buf_2
  119. mov si, OFFSET wynik_dziel
  120. mov cx,4
  121. add bx,5
  122. add si,5
  123. sumuj_wyniki:
  124. mov ax, [bx]
  125. sub ax, 30h
  126. mov dx, [si]
  127. sub dx, 30h
  128. add ax,dx
  129. cmp ax, 3
  130. jb dodaj
  131. przenies:
  132. call DEBUG
  133. sub ax, 3
  134. dodaj:
  135. add ax, 30h
  136. push WORD PTR si
  137. mov si,OFFSET suma_tab
  138. add si,cx
  139. mov [si],ax
  140. pop si
  141. dec bx
  142. dec si
  143. loop sumuj_wyniki
  144. mov bx, OFFSET suma_tab
  145. wyswietl_wyniki:
  146. mov dl, [bx] ;wpisanie do rejestru DL kodu ASCII
  147. cmp dl,'$'
  148. je koniec
  149. mov ah, 2
  150. int 21H ;wyświetlenie znaku za pomocą funkcji nr 2 DOS
  151. inc bx ;inkrementacja adresu kolejnego znaku
  152. jmp wyswietl_wyniki
  153. koniec:
  154. mov al, 0 ;kod powrotu programu (przekazywany przez
  155. ;rejestr AL) stanowi syntetyczny opis programu
  156. ;przekazywany do systemu operacyjnego
  157. ;(zazwyczaj kod 0 oznacza, że program został
  158. ;wykonany poprawnie)
  159. mov ah, 4CH ;zakończenie programu – przekazanie sterowania
  160. ;do systemu, za pomocą funkcji 4CH DOS
  161. int 21H
  162.  
  163. DEBUG PROC
  164. push si
  165. push dx
  166. push ax
  167. mov si, OFFSET text
  168. pisz_text:
  169. mov dl,[si]
  170. cmp dl, '$'
  171. je koniec_text
  172. mov ah,2
  173. int 21H
  174. inc si
  175. jmp pisz_text
  176. koniec_text:
  177. pop ax
  178. pop dx
  179. pop si
  180. ret
  181. DEBUG ENDP
  182. rozkazy ENDS
  183.  
  184. nasz_stos SEGMENT stack ;segment stosu
  185. dw 128 dup (?)
  186. nasz_stos ENDS
  187.  
  188. END wystartuj ;wykonanie programu zacznie się od rozkazu
  189. ;opatrzonego etykietą wystartuj
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement