Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROG SEGMENT CODE                               ; definicja segmentu dla programu glownego
  2. PROC SEGMENT CODE                               ; definicja segmentu dla podprogramow
  3. IleLiczb EQU 16
  4.    
  5. CSEG AT 0
  6.     LJMP start
  7.    
  8.        
  9. RSEG PROG
  10.     start:
  11.         ACALL copyROMtoRAM                      ; kopiowanie danych tablicy poczatkowej z pamieci ROM do RAM
  12.         ACALL fibonacci
  13.         SJMP $                                  ; pozostan tu po wykonaniu programu
  14.            
  15. RSEG PROC  
  16.     copyROMtoRAM:
  17.         MOV DPTR, #startowe_liczby              ; wczytanie wskaznika do pamieci ROM
  18.         MOV R0, #40h                            ; wczytanie wskaznika do pamieci RAM (zapisujemy w rejestrze 0, bank 0)
  19.             LOOP:                               ; petla idaca po tablicy
  20.                 CLR A                           ; A = 0
  21.                 MOVC A, @A + DPTR               ; przeniesienie bajta z pamieci ROM do akumulatora
  22.                 JZ EXIT                         ; jezeli natrafilismy na NULL (wartosc 0) wyjdz z petli
  23.                 MOV @R0, A                      ; zapisanie wartosci do pamieci RAM
  24.                 INC DPTR                        ; zwiekszenie wskaznika na ROM o 1
  25.                 INC R0                          ; zwiekszenie wskaznika na RAM o 1
  26.                 SJMP LOOP                       ; petla
  27.             EXIT:
  28.                 RET                             ; wyjscie z funkcji
  29.     fibonacci:
  30.         MOV R0, #40h                            ; wczytanie wskaznika do pamieci RAM
  31.         MOV R2, #40h                            ; Rejestr 2 bedzie przechowywal adres poczatku naszej tablicy
  32.         MOV R3, #0h                             ; Rejestr 3 bedzie przechowywal nasza pozycje w tablicy (i)
  33.         MOV DPTR, #k                            ; wczytanie wskaznika do pamieci ROM
  34.         MOVC A, @A + DPTR
  35.         MOV R6, A                               ; Bedzie przechowywalo ilosc naszych liczb (k)
  36.         MOV A,#IleLiczb                                    
  37.         MOV R7, A                               ; Wartosc rejestru 7 bedzie zmniejszana na koncu petli az do 0, ilosc generowanych liczb
  38.             PETLA:
  39.                 MOV DPTR, #j
  40.                 CLR A                           ; Wczytanie
  41.                 MOVC A, @A + DPTR               ; wartosci j do
  42.                 MOV R1, A                       ; rejestru 1
  43.                
  44.                 MOV A, R6                       ; Wyznaczenie liczby
  45.                 ADD A, R3                       ; (k + i)
  46.                 SUBB A, R1                      ; Regulka [k + i - j]
  47.                 MOV R5, A                       ; Przeniesienie tej wartosci do rejestru 5
  48.                
  49.                 MOV A, R6                       ; Wczytanie naszego k
  50.                 MOV B, A                        ; Przeniesienei go do B (mianownik)
  51.                 MOV A, R5                       ; Wczytanie naszego indeksu [k+i-j]
  52.                 DIV AB                          ; Podzielenie tego przez nasze k
  53.                 MOV R4, B                       ; Przeniesienie naszego wlasciwego indeksu do rejestru 4 (R4=[k+i-j] mod k)
  54.                
  55.                 CLR A                           ; Znajdywanie indeksu na ktorym jestesmy
  56.                 MOV A, R2                       ; Przypisanie adresu poczatku tablicy
  57.                 ADD A, R3                       ; Dodanie naszego i do adresu poczatku tablicy
  58.                 MOV R1, A                       ; Przeniesienie tej wartosci do rejestru 1 (R1=adres i-tego elementu)
  59.                 MOV A, @R1                      ; Zwrocenie naszej wartosci pod indeksem x[i] do akumulatora           
  60.                 MOV R5, A                       ; Przeniesienie naszej dobre wartosci do rejestru 5 (R5=x[i])
  61.                
  62.                 CLR A
  63.                 MOV A, R2                       ; Wczytanie adresu poczatku tablicy
  64.                 ADD A, R4                       ; wlasciwego indeksu do tablicy
  65.                 MOV R1, A                       ; Przeniesienei adresu do rejestru 1
  66.                 MOV A, @R1                      ; Zwrocenie wartosci pod rejestrem
  67.                 ADD A, R5                       ; Otrzymanie wyniku (x[(k + i - j) mod k] + x[i])
  68.                 MOV R1, A                       ; Przeniesienie tej wartosci do rejestru 1
  69.                
  70.                 CLR A
  71.                 MOV DPTR, #m                    ; Wczytanie wskaznika ROM
  72.                 MOVC A, @A + DPTR               ; Wczytanie wartosci m do akuulatora
  73.                 MOV B, A                        ; Przepisanie tej wartosci do B
  74.                
  75.                 MOV A, R1                       ; Przepisanie wartosci z rejestru 1 do A
  76.                 DIV AB                          ; Operacja (x[(k + i - j) mod k] + x[i]) mod m
  77.                 MOV R1, B                       ; Przeniesienie naszego wyniku do rejestru 1
  78.                
  79.                 MOV A, R2                       ; Wczytanie adresu poczatku tablicy
  80.                 ADD A, R3                       ; i ustalenie naszego indeksu
  81.                 MOV R0, A                       ; Przepisanie tego indeksu do R0 (R0=adres i-tego elementu w pamieci RAM)
  82.                 MOV A, R1                       ; Wczytanie naszego wyniku do A
  83.                 MOV @R0, A                      ; Nadpisanie tablicy naszym wynikiem
  84.                
  85.                 MOV A,R3                        ;Wyliczenie nowego i
  86.                 ADD A,#1h
  87.                 MOV B,R6;
  88.                 DIV AB
  89.                 MOV R3,B                        ;i=(i+1) mod k
  90.                
  91.                 DJNZ R7, PETLA         
  92.             WYJSCIE:   
  93.                 RET
  94.    
  95. CSEG AT 250h
  96.     startowe_liczby:
  97.         DB 4, 5, 3, 3, 3, 4, 6, 2, 6, 5, 0
  98.     j:
  99.         DB 7
  100.     k:
  101.         DB 10
  102.     m:
  103.         DB 4
  104.            
  105. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement