Dobrý den.
Předem bych chtěl poděkovat panu Tišnovskému za pěkné, čtivé články.
Dovolil bych si pouze upozornit na fakt, který není v článku zmíněn, že libovolné použití všech registrů R0 až R31 nelze použít u přímých instrukcí s (8-mi bitovou) konstantou. Jelikož instrukce AVR jsou 16-ti bitové, při použití 8-mi bitové konstanty a 4 bitů pro kód instrukce zbývají již jen 4 bity pro určení cílového registru. Ten tedy může být z rozsahu R16 až R31. Proto u nejmenších AVRtiny, kde jsou registry zredukovány na polovinu, chybí kvůli kompatibilitě právě ta spodní polovina R0 až R15 (a jsou tím též zachovány registrové páry X (R26:R27), Y (R28:R29) a Z (R30:R31)).
S pozdravem
Aleš
Diky za upozorneni, o instrukcich s konstantou jsem se skutecne zapomel zminit. U techto instrukci je zajimave i to, ze na vetsine mikroradicu AVR trvaji dva takty namisto jednoho taktu, coz asi souvisi s tim, ze je nutno pozastavit ALU az do zpracovani instrukcniho kodu radicem (ale mozna je duvod v tomto pripade jiny).
Ano, máte pravdu. Tyto přímé instrukce ADIW/SBIW (pracující s dvojicí registrů) opravdu trvají 2 takty, narozdíl od těch co operují s jedním registrem a 8-mi bitovou konstantou. Ty samozřejmě trvají pouze 1 takt. U přímých instrukcí pracujících s dvojicí registrů tu je omezení ve velikosti konstanty, která je tvořena již jen šesticí bitů, proto může nabývat hodnoty 0 až 63.
Aleš
Hmm v predchozi odpovedi jsem dal do jedne vety dohromady dve nesouvisejici informace :-(
Chtel jsem totiz napsat, ze u nekterych instrukci je adresovani registru jeste vice omezene nez jen na R16-R31 a ze tyto instrukce soucasne trvaji dva takty. Jak spravne pisete, jsou to ADIW a SBIW, kde se do 16bitoveho instrukcniho kodu musela nejak vejit jak konstanta, tak i index prvniho registru z registroveho paru.
Nakonec se tam vesla jen sestibitova konstanta a registrovy par je omezen na moznosti 24+25, 26+27, 28+29 a 30+31, coz vlastne neni tak malo, protoze sem padnou i X, Y a Z :-) a pro nejake preskoceni casti pole pri adresovani offset 0-63 nekdy postacuje.