logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega8 ASM - Ile cykli zegarowych dla LDS z tablicy?

harmichalh 10 Lut 2014 10:19 1371 6
  • #1 13283525
    harmichalh
    Poziom 12  
    Witam. Taki kod:
    LDS R19, zmienna
    OUT PORTB, R19
    To 3 cykle zegarowe.

    Ale ile cyki to taki kod:
    LDS R19, tablica[R18]
    OUT PORTB, R19
    3 czy 4 cykle?


    Ale ile cyki to taki:
    LDS R19, tablica[2]
    OUT PORTB, R19
    3 czy 4 cykle?
  • #2 13283539
    Steryd3
    Poziom 33  
    Ktoś będzie drapał się po głowie, myślał, kombinował i odpowie na twoje pytanie-dobrze lub źle. Później zacznie się demokratyczne głosowania co jest prawdą a co nie i nie wiadomo jak się skończy. Skorzystaj lepiej z symulatora w Atmel Studio -będziesz miał jednoznaczną odpowiedź na tego typu pytania.
  • #3 13283562
    harmichalh
    Poziom 12  
    Niestety na sprzęcie, z ktorego w tej chili korzystam, Atmel Studio nie pójdzie. Postaram sie jednak jakoś to sprawdzić. A jak zrobić taka symulacje?
  • #4 13283731
    Steryd3
    Poziom 33  
    Po pierwsze musisz napisać ten program wcześniej tworząc projekt assemblera-ale to akurat oczywiste. Jako Debugger ustawiasz AVR Symulator i klikasz odpowiedni przycisk rozpoczynające debugowanie/symulację. W bocznym panelu pokazują się różne parametry stanu mikroprocesora a wśród nich widoczna jest też informacja w którym takcie zegara mikroprocesor się aktualnie zatrzymał. Odczytujesz ten parametr przed rozpoczęciem interesującej Cię sekwencji instrukcji i po jej zakończeniu. Różnica na tych dwóch wartościach daje wprost odpowiedź na twoje pytanie. Całe środowisko jest dość intuicyjne więc powinieneś sobie poradzić.
  • #6 13284260
    Eagle
    Poziom 24  
    harmichalh napisał:
    Witam. Taki kod:
    LDS R19, zmienna
    OUT PORTB, R19
    To 3 cykle zegarowe.

    Ale ile cyki to taki kod:
    LDS R19, tablica[R18]
    OUT PORTB, R19
    3 czy 4 cykle?


    Ale ile cyki to taki:
    LDS R19, tablica[2]
    OUT PORTB, R19
    3 czy 4 cykle?



    Adres instrukcji LDS musi być znany podczas kompilacji. W drugim przykładzie adres jest obliczalny dynamicznie, w pozostałych przypadkach adres jest znany podczas kompilacji, więc czas możesz spokojnie odczytać z dokumentacji Link


    Cytat:

    LDS – Load Direct from Data Space
    Operation:
    (i) Rd  (k)
    Syntax: Operands: Program Counter:
    (i) LDS Rd,k 0 ≤ d ≤ 31, 0 ≤ k ≤ 65535 PC  PC + 2
    Cycles: 2
    Cycles XMEGA: 2 If the LDS instruction is accessing internal SRAM, one extra cycle is inserted.
  • #7 13285898
    harmichalh
    Poziom 12  
    Rzeczywiście trochę namieszałem.
    1. tablica[R18] nie zadziała, takie coś działa z tego co wyczytałem tylko dla x86
    2.Adres tablica[2] jest znany w trakcie kompilacji, więc są to 2 cykle + OUT = 3 cykle

    Aby odczytać dane z tablicy (dynamicznie) musiałem użyć kodu:
    ;dane są na początku RAMu czyli pod adresem 0x60
    Kod: text
    Zaloguj się, aby zobaczyć kod

    W takim wypadku odczyt (nie zależnie czy robimy X, czy X+) zajmuje 2 cykle + OUT = 3 cykle.
REKLAMA