[elektro] AVR assembly kérdés

Varsanyi Peter varsanyi at t-online.hu
Wed Feb 16 17:53:13 CET 2011



		Sziasztok!


Nekiálltam asm-ben kioptimalizálni egy gyors kódot, de elakadtam egy 
elméleti problémánál. Adott két 24 bites elõjel nélküli szám, mondjuk 
R20:R21:R22 és R23:R24:R25 Ezek között akarok kisebb, nagyobb, egyenlõ 
vizsgálatokat végezni. Adatlap szerint a "CP Rd,Rr" végez byte-ok közötti 
compare-t, a "CPC Rd,Rr" pedig ettõl abban tér el, hogy "carry átvitelt" is 
csinál. Ezzel szemben az alábbit tapasztaltam:

Az egyezés vizsgálat szépen mûködik, bármely eltérést kiszúr a ZERO bittel, 
amely szépen "végigmegy" az utasításokon, így a végén egyben kiértékelhetõ:
	cp  R20,R23
	cpc R21,R24
	cpc R22,R25
	brne/breq <címke>

A kisebb-nagyobb vizsgálat viszont hibázik bizonyos esetekben a 
szimulátorom szerint, mintha pont a carry bit "nem menne végig" az 
összehasonlítás láncon:
	cp  R20,R23
	cpc R21,R24
	cpc R22,R25
	brcc/brcs <címke>
A hiba akkor jelentkezik, amikor pl. az 123456H és a 123555H számot 
hasonlítom össze. A középsõ szám eltérését jelzõ carry bit felülíródik az 
utolsó számnál végrehajtott compare során - legalábbis a szimulátorom ezt 
állítja...

Végezetül az AVR assembly leírás egyik oldala szerint a BRCC és a BRSH 
között az a különbség, hogy az utóbbi C+Z bitet figyel, míg az elsõ csak a 
Carry bitet, egy másik oldala szerint a kettõ utasítás egyenértékû, és 
mindkettõ csak a Carry bitet figyeli. Ugyanez a szitu a BRCS és BRLO 
utasításokkal. Látszólag így is mûködik, így viszont nem értem a doksi 10. 
oldalán leírtakat. (AVR Instruction Set, 0856C-09/01)

Szóval per pillanat nem tudok máshogy összehasonlítani két 24 bites számot, 
mint 3-3 CP és BRxx utasítással, ami így "lassabb", mint amit szerintem el 
lehetne érni, ha a CP és a CPC utasítás között tényleg lenne különbség.

A kérdésem tehát: hogy is van ez az egész? Van valami jó leírás a tipikus 
AVR ASM-es feltétel-vizsgálatokról, ill. valami rendes szimulátor, amely 
biztosan, sõt holtbiztosan teljesen tökéletesen dolgozik? Az enyémnek már 
nem hiszek...

Köszi:

Pepe



More information about the Elektro mailing list