Advertisement
bartus1342

Untitled

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