Zähler in Assembler

Gast #5378286
Lesenswert?

Ich habe mal zwei Fragen zu einem Assembler Code welchen unser Dozent an 
der Tafel hatte.

Es soll in dem Programm darum gehen von 10 auf 0 zu zählen.

Was ich schonmal nicht verstehe..

Der Befehl
ldi akku, 0

ist doch überflüssig, da gleich danach immer der Wert aus temp nach Akku 
geladen wird. ? Oder sehe ich das falsch.?

der Befehl
ldi temp, 10

direkt danach ist auch überflüssig, da bereits vorher temp mit dem Wert 
10 geladen wird und temp anschließend nicht verändert wird.
einmal reicht also aus oder?

Sorry für die Bilddatei.
Angehängte Dateien:
Gast #5378329
Lesenswert?

Jim M. schrieb:
> Da gibt es noch wesentlich mehr überflüssige Instruktionen.
>
> Bei solchen Beispielen wird aber oftmals in späteren Lektionen weiterer
> Code eingefügt, der dann die "sinnlosen" Instuktionen ausnutzt.

ok.. das habe ich mir schon gedacht.
Eine andere frage. ich verstehe nicht wie dieser Zähler funktionieren 
soll.

Denn vor dem Vergleich
brne

steht der Befehl mov akku, temp.

Das heißt akku und temp sind immer gleich. Der Befehl brne prüft ja die 
Ungleichheit. Somit wäre es ja nie ungleich. Oder wie kann man das 
verstehen.?
Moderator (Firma: Titel) Persönliche Seite #5378356
Lesenswert?

Matthias S. schrieb:
> Immerhin ist es schon AVR und nicht mehr Z80 oder MCS51...
Warum um alles in der Welt definiert man in einer Mehrregistermaschine 
einen "Akku"? Die zugrundeliegende Denkweise ist offenbar immer noch 
8051...

O.A. schrieb:
> Das heißt akku und temp sind immer gleich. Der Befehl brne prüft ja die
> Ungleichheit.
brne fragt nur das Zero-Flag ab. Das wird aber durch mov nicht 
verändert. Der letze auf dieeses Flag wirkende Befehl ist dec temp.

EDIT: Hoppla, zu lang gewartet... ;-)
Gast #5378630
Lesenswert?

Yupp, so wie sdfu das geschrieben hat.

Der ganze Beispielcode ist völlig ineffizient. Offensichtlich wird nach 
der Schleife dann der Zähler neu geladen und wahrscheinlich nach 
"mainloop" gesprungen? Dann würde man einfach noch einen Tick weiter 
nach oben springen und hat die Zählerinitialisierung nur ein mal im Code 
stehen.

Das spart etwas Speicher (ja, interessiert heute niemanden mehr, bis sie 
dann vor die Wand klatschen weil der Microcontroller doch voll ist…), 
macht den Code besser lesbar weil der Kontext klarer wird und es 
reduziert die Anzahl der Stellen an denen man ggf. etwas ändern muss 
wenn man einen anderen Schleifenwert braucht.

Also dem Dozenten fehlt die Routine mit Assembler zu programmieren.
(Firma: matzetronics) #5378783
Lesenswert?

Lothar M. schrieb:
> Die zugrundeliegende Denkweise ist offenbar immer noch
> 8051...
Route 6. schrieb:
> Da erkennt man wo der obige Programmablauf herkommt: vom 8051.

Ihr habt recht - es fällt mir wie Schuppen aus den Haaren :-P Der 
Schreiberling hat sich anscheinend nie wirklich von MCS-51 
verabschiedet. Und ich versuche die ganze Zeit, in dem Rumschieben 
zwischen akku und temp einen Sinn zu sehen, schade um die Zeit...
Gast #5378950
Lesenswert?

Route 6. schrieb:
> Da erkennt man wo der obige Programmablauf herkommt: vom 8051.
> Dort wird das Zero-Flag bei DEC nicht beeinflusst. Es wird dann
> gesetzt, wenn der Akku Null ist! Delhalb hier das Gewusel mit temp und
> AKKU.

Denkt ihr dass ein DEC einer SRAM-Speicherstelle (Temp) ein Zeroflag 
setzen müsste bei 0 ?

Ich habe mich schon gewundert was ihr meint und dachte schon dass meine 
8051-Kenntnisse nicht viel wert sind  :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren