8. Laboratoř: Aritmetika, posuvy, využití příznaků
Navrhněte a simulujte v MPLABu prográmky pro 8bitovou a 16bitovou aritmetiku. Použijte instrukce pro sčítání, odčítání a bitové posuvy k násobení malou konstantou. Vyzkoušejte si také jednoduché větvení/podmínky. Zejména instrukce add, adc, sub, sbc, subi, lsl, rol, lsr, ror, asr, cp, cpi.
1. Bodované úlohy
1.1. Úloha 7: Spočítejte následující výraz
(Tato úloha je částečně řešena ve skriptech a byla částečně vzorově vyřešena na prosemináři. V těchto vyřešených příkladech chybí kontrola správnosti výpočtu!)
R20 = (4 * R16 + 3 * R17 - R18) / 8
LDI R16, 5
LDI R17, 10
LDI R18, 58
... doplňte instrukce ...- Operandy jsou 8bitové, výsledek 8bitový, veškeré mezivýsledky udržujte také 8bitové.
- Operandy a výsledek jsou v doplňkovém kódu.
- Výraz by měl být spočítán správně. Pokud nelze výraz správně spočítat (s použitím 8bitových registrů), program by měl toto indikovat (např. nastavením V flagu nebo alespoň skokem na příslušné návěští).
Hodnocení
1 bod za úspěšné dokončení tohoto úkolu.
1.2. Úloha 8: Napište program, který zobrazí na displeji zadané osmibitové číslo v šestnáctkové soustavě
Číslo, které se má zobrazovat, bude "natvrdo" zadané v kódu. Např.
ldi r16, 0x5A
- Použijte knihovny pro práci s displejem z minulého cvičení.
- Použijte instrukce pro posuv a maskování, abyste dostali jednu šestnáctkovou číslici (resp. dvě šestnáctkové číslice).
- Použijte porovnání a sčítání, abyste z číslice vytvořili ASCII znak (kód ‘A’ je 65, kód ‘0’ je 48).
- Cvičící může zadat libovolné číslo z rozsahu 0x00-0xff a program jej musí (po překladu) zobrazit korektně.
Varování:
Simulátor displeje nepodporuje Reset simulace - může dojít k tomu, že se přestanou vypisovat jakékoli znaky. V takovém případě simulaci ukončete a znovu spusťte.
Hodnocení
1 bod za úspěšné dokončení tohoto úkolu.
1.3. Úloha 9: Napište program, který vypočítá výraz z Úlohy 7 vždy správně a zobrazí na displeji
- Zdrojové operandy budou stále 8bitové (r16-r18), ale mezivýsledky a výsledek budou 16bitové.
- Operandy a výsledek jsou v doplňkovém kódu.
- 16bitový výsledek zobrazte na displeji.
- Jediný možný nesprávný výsledek je způsobený chybou přesnosti. Toto indikujte na displeji (spolu se zaokrouhleným výsledkem).
Hodnocení
2 body za úspěšné dokončení tohoto úkolu.
2. Odevzdání úloh na EET
Pokud cvičící neurčí jinak, odevzdejte řešení úloh na EET dle pokynů na hlavní stránce cvičení.
3. Doplňující informace
V těchto úlohách úloze budete pracovat s displejem – více informací naleznete na stránce s manuály na AVR – konkrétně na Práce s displejem.