247
Synopsis: [ wikipedia.org/wiki/Arithmetic_Logical_Unit ]
Problem: Die Gleichung c = a + b mit den Werten a = 11 und b = 26 soll mit AVR-Assembler gelöst werden.
Folgender Quelltext ist bereits gegeben:
.include "2313def.inc" .def a = R16 ;R16 als Variable a .def b = R17 ;R17 als Variable b .def c = R18 ;R18 als Variable c ldi a,11 ;lade 11 in a ldi b,26 ;lade 26 in b
Welche Bedeutung haben die Assembler-Anweisungen .include, .def und ; ? Nutzen Sie hierzu Schnelleinstieg in AVR-Assembler.
Ergänzen Sie den Quellcode zu einer Lösung für c = a+b, wobei a und b nicht verändert werden dürfen! Nutzen Sie hierzu AVR Befehlssatz.
Ihre Lösung soll mittels Simulation überprüft werden, dazu benötigen Sie die Software AVR-Studio und müssen ein neues Projekt erstellen:
| 1. Programm starten | 2. Neues Projekt erstellen |
|---|---|
![]() |
| 3. Projekt richtig speichern | |
|---|---|
![]() |
|
| 4. Simulator und Device wählen | |
|---|---|
![]() |
|
| 5. Quelltext einfügen | Simulation |
|---|---|
| Kopieren Sie einfach den Quelltext von oben und setzen Sie ihn ein, ergänzen Sie ihn um Ihre Lösung..
|
![]() |
| Iconleiste
|
|
|
|
Mit Start Debugging kann die Simulation gestartet werden:

Der gelbe Pfeil zeigt nun auf die erste Anweisung die als nächstes ausgeführt werden soll.
Nun Step Into (F11) ausführen:

In Register 16 wurde 0x0B = 11 geladen.. Sie besitzen nun das Handwerkszeug um die Aufgabe zu lösen.
Welchen Wert hat c (Register 18) wenn das Ergebnis der Addition größer als 255 ist?
Erinnern Sie sich an den Volladdierer, wie wird die Übertragsleitung auf Englisch genannt? Suchen Sie im Befehlssatz nach diesem Begriff.
Erweitern Sie Ihr Programm so, dass mit Register 19 als "HighByte" eine 16 Bit Summe möglich wird.
Welche weiteren ALU-Flags [ wikipedia.org/wiki/Arithmetic_Logical_Unit ] gibt es und wozu werden sie gebraucht, Beispiele von Befehlen siehe AVR Befehlssatz..