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

[asm][Atmega8] Jak się dobrać do rejestrów R0-R15

pawel200388 07 Sie 2009 19:56 1836 4
REKLAMA
  • #1 6867865
    pawel200388

    Poziom 17  
    Witam :)
    Jak w temacie :) Zastanawiam się jak skorzystać z więcej niż szesnastu (R16-R31) rejestrów w uC Atmega8. Nie jestem pewien czy nie są wykorzystywane do czegoś po prostu, ale swego czasu próbowałem skompilować kod z wykorzystaniem R15 i wyrzuciło mi błąd 'Invalid register' :)
  • REKLAMA
  • #2 6867987
    Demoman
    Poziom 17  
    r0-r15 nie możesz używać między innymi z rozkazami w których są "wartości natychmiastowe", czyli immediate.
    To wszystkie rozkazy z "i", np. cpi, ldi ...

    Po dokładne informacje odsyłam do referencji atmela z dokładnymi rozkazami asemblera.
  • REKLAMA
  • #3 6868362
    BoskiDialer
    Poziom 34  
    Jak już Demoman zauważył, dolne rejestry (r0-r15) mają lekko ograniczone zastosowanie. Avr'y mają instrukcje o długości 2 bajtów (tylko lds, sts, jmp, call zajmują 4 bajty). Oznacza to, że maksymalnie można zapisać 65536 różnych wariantów instrukcji. Instrukcje z wartością natychmiastową (cpi, sbci, subi, ori, andi, ldi) zajmują dość dużą część puli opcode - każda 1/16 czyli 6/16 puli na same instrukcje z wartością natychmiastową. Dodatkowo dochodzą instrukcje rcall i rjmp, które przyjmują 12 bitową stałą - połowa puli na same instrukcje z wartością natychmiastową i skoki. Rozszerzenie instrukcji z wartością natychmiastową o możliwość wykorzystania dolnych rejestrów spowodowała by prawie wyczerpanie puli. Wszystkie pozostałe instrukcje które nie są aliasami instrukcji z wartością natychmiastową (ser-ldi, cbr-andi, sbr-ori) umożliwiają użycie dowolnego rejestru lub posiada zupełnie inne ograniczenie - ale to można znaleźć w dokumentacji atmela.

    Kiedyś zrobiłem sobie poglądową tabelę z instrukcjami i ograniczeniami na rejestry, może zawierać drobne błędy, mimo to może być pomocne.
    Załączniki:
  • REKLAMA
  • #4 6868624
    pawel200388

    Poziom 17  
    Świetna rzecz :D Co prawda aż tak wiele mi to jak na razie nie da, ale przerzucę rejestry używane jako bufory w pierewszą piętnastkę :D Da mi to kilka rejestrów ekstra :D A później postaram się opanować jak najwięcej operacji na wszystkich 32 :)
    Co do samej treści postu, jutro przeczytam jeszcze raz i przeanalizuje :D Dzięki za fachową odpowiedź :)
    Co do dokumentacji: racja, można znaleźć w niej wszystko i zawsze, tylko trzeba umieć szukać i wiedzieć czego szukać. Myślę, że to przyjdzie wraz z obyciem z mikrokontrolerami :)
REKLAMA