SHARE
TWEET

Untitled

bartus1342 Jun 19th, 2017 44 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top