[ korak @ 31.10.2010. 13:40 ] @
Naisao sam na neobican (barem meni) algoritam za korenovanje u AVR studiju. Rastumacio sam ga, ali mi nije jasno sta se postize naredbom:

LAT R26

posle nje R26 ima vrednost 0x00 ili 0xFF, a ja ne znam kako, iako sam video opis te naredbe nista mi nije pomoglo.

Zamolio bih nekog ako zna da mi rastumaci ovu naredbu.

Unapred hvala,

Pozdrav.
[ Odin D. @ 31.10.2010. 18:14 ] @
Kod mene u datasheet-u stoji da je sintaksa:

LAT Z, Rd

pri cemu je:

Z - Zero Flag
Rd - neki registar

Moguce je da "kompajler" podrazumjeva ono Z, pa ga nije potrebno navoditi kao operand naredbe.

E sad, kaze se dalje da operacija radi sledece:

(Z) <- Rd XOR (Z);
Rd <- (Z);

Rd ce nakon ove operacije postati 0xFF ako je:

1) rezultat prethodne operacije nula (Z==1) i Rd == 0
2) rezultat prethodne operacije nije nula (Z==0) i Rd != 0

U ostalim slucajevima ce biti 0x00.

Cemu to sluzi nemam pojma :)
[ korak @ 31.10.2010. 22:17 ] @
Bunilo me je to sto je napisano (Z) pa sam mislio da se radi o Z indeksnom registru, mada sam pomisljao i na statusni bit. Pogledao sam na sta ukazuje Z (R30 i R31) i video da nema veze sa tim.

Bice da si u pravu, jer se na tom mestu odredjuje prosirenje bajta sobzirom na znak.

Hvala ti, a ako neko ima neko drugo misljenje, ili potvrdu ovog neka napise bice korisno.

Pozdrav.
[ korak @ 01.11.2010. 22:42 ] @

Ipak je Z indeksni registar. Vratio sam se na pocetak, opet nista ne znam.

AVR studio je uz LAT R26 dao kod 0x95A0 sto se ne slaze sa dokumentacijom, vec taj kod predstavlja naredbu komplementiranja vrednosti registra R26.

Probe sam radio za ATmega128, ali kada sam promenio tip MCU-a, i uzeo onaj koji nema LAT naredbu, prevod je bio isti?????

Sta je pisac (kompajlera) hteo da kaze?
Da li neko zna?

Pozdrav.
[ mradomir @ 02.11.2010. 15:07 ] @
Citat:

Probe sam radio za ATmega128, ali kada sam promenio tip MCU-a, i uzeo onaj koji nema LAT naredbu, prevod je bio isti?????


Ovo je greška u disasembleru, dosta njih je primetilo isti problem.
Inače LAT radi XOR između registra i indirektno adresirane memorijske lokacije (Z).
Rezultat se smešta u (Z) - indirektno adresiranu lokaciju, a staro stanje iste se
prebacuje u registar, uf.
Pretpostavljam da su uočili kako mogu optimizovati C kod ovom komandom, e sad u kom slučaju...

[ korak @ 02.11.2010. 20:02 ] @
Ocigledno je da je neka greska u disasembleru, ali koja.

Mislim da je greska LAT 26 i da treba da stoji COMP R26 jer kod naredbe odgovara komplementiranju vrednosti R26. To potvrdje i prolaz korak po korak kroz tu naredbu jer se uvek desi komplementiranje R26, a ne menja se lokacija na koju ukazuje Z.

Da li se slazes?

Pozdrav.
[ Odin D. @ 02.11.2010. 20:16 ] @
Ja se izvinjavam za unesenu zabludu, nisam namjerno. Kod mene u nomenklaturi za asembler pise da je Z zero flag.

Zato i slabo varim asembler. Covjek se tu vise bavi alatom nego zanatom...
[ korak @ 02.11.2010. 23:00 ] @
Ma nema veze, ja sam verovatno najvise bio u nedoumici jer nisam radio uzivo sa AVR-om.

Medjutim, AVR studio ima vrlo interesantan sqrt algoritam koji se izvrsava duplo brze od deljenja a cetri puta brze od mnozenja. To mi je bilo neverovatno, pa sam uzeo da ga rastumacim. Takodje me je iznenadilo da ocigledno algoritam za mnozenje ne koristi postojece asemblerske naredbe mnozenja, inace bi mnozenje bilo brze od deljenja. Ovo neprijatno iznenadjenje je ipak manje od prijatnog iznenadjenja sqrt algoritmom. U celini AVR studijo ima odlican kompajler.

Pozdrav.