[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