Forum: Mikrocontroller und Digitale Elektronik Hilfe benötigt


von Georg Steiner (Gast)


Lesenswert?

Kann mir jemand sagen was die genaue Funktion dieses Programmsist?


cseg at 0

  start:   mov  R5, #10

      mov  A, #0

      mov  R0, #10h

loop:     add  A, @R0

      inc   R0

      djnz  R5, loop

stop:     jmp   stop

end


mfg

von holger (Gast)


Lesenswert?

>Kann mir jemand sagen was die genaue Funktion dieses Programmsist?

Ja klar, das Assemblerhandbuch zu deinem uC.
Die sieben Zeilen kann man damit in 10 Minuten
verstehen.

von Magnus Müller (Gast)


Lesenswert?

Georg Steiner schrieb:
>   start:   mov  R5, #10

Lade R5 (Schleifenzähler) mit dem Wert 10.

>       mov  A, #0

Lade Akkumulator mit dem Wert 0.

>       mov  R0, #10h

Lade Register R0 mit dem Wert 10.

> loop:     add  A, @R0

Addiere den Inhalt der Speicherzelle, auf die das Register R0 zeigt, zum 
Akkumulator.

>       inc   R0

Inkrementiere den Wert in R0 um 1 (Zeiger um 1 erhöhen)

>       djnz  R5, loop

Dekrementiere den Wert in R5 (Schleifenzähler um 1 erniedrigen) und 
springe zurück zum Label "loop" wenn nach der Denkrementierung der Wert 
in R5 größer als 0 ist.

> stop:     jmp   stop

Dies ist eine Endlosschleife.

von Mark B. (markbrandis)


Lesenswert?

Georg Steiner schrieb:
> Kann mir jemand sagen was die genaue Funktion dieses Programmsist?

Ich versuch's mal, ohne den besagten Prozessor/Assembler zu kennen.
1
cseg at 0
Segement ab Adresse 0?

1
start:   mov  R5, #10
In das Register R5 wird der Wert 10 (hexadezimal wohl, also 16) 
geschrieben.
1
mov  A, #0
In den Akkumulator wird der Wert 0 geschrieben.
1
mov  R0, #10h
In das Register R0 wird #10 geschrieben.
1
loop:     add  A, @R0
Hier fängt die Schleife an. Es wird zum aktuellen Wert des Akkumulators 
jeweils der Wert des Registers R0 addiert.
1
inc   R0
Das Register R0 wird um 1 hochgezählt.
1
djnz  R5, loop
jnz ist sicher "jump if not zero"... das d sagt mir jetzt grad nichts. 
Es wird also der Wert in Register R5 geprüft. Wenn dieser nicht Null 
ist, wird an den Anfang der Schleife gesprungen.
1
stop:     jmp   stop
2
end
Und nu isses zu Ende. :-)

von Mark B. (markbrandis)


Lesenswert?

Ach Mist, zu langsam. Und wohl eh falsch ;-)

von Magnus Müller (Gast)


Lesenswert?

Die Mnemonics sehen übrigens stark nach MCS51 aus (8051-Serie)

von holger (Gast)


Lesenswert?

>Die Mnemonics sehen übrigens stark nach MCS51 aus (8051-Serie)

Ach was ;)

>>       mov  R0, #10h
>Lade Register R0 mit dem Wert 10.

Darüber würde ich noch mal nachdenken.

von Magnus Müller (Gast)


Lesenswert?

holger schrieb:
>>Die Mnemonics sehen übrigens stark nach MCS51 aus (8051-Serie)
>
> Ach was ;)

Ach ja.... ;o)

>>>       mov  R0, #10h
>>Lade Register R0 mit dem Wert 10.
>
> Darüber würde ich noch mal nachdenken.

Stimmt. Das "h" am Ende hatte ich offensichtlich übersehen. Dann wird 
das Register halt mit dem Wert 10(Hex) geladen, was dezimal 16 
entspricht.

von H.Joachim S. (crazyhorse)


Lesenswert?

>
1
loop:     add  A, @R0
> Hier fängt die Schleife an. Es wird zum aktuellen Wert des Akkumulators
> jeweils der Wert des Registers R0 addiert.

Da könnte man auch noch mal drüber nachdenken, wenn meine 
Kleinhirn-Assemblerreste mich nicht gerade völlig täuschen...

von Niels K. (niels-k)


Lesenswert?

Das ist eindeutig eine Siemens UP. Ich gehe auch davon aus, dass es sich 
entweder um einen 8051, 8052, 80515 oder um einen 80C517 handelt.

Es gibt da übrigens einen sehr guten Simulator dafür, der heißt 
Simula5x, Simulator für die 8051-Familie. Damit kann man dann genau 
überprüfen, was das Progamm gerade macht. Läuft aber noch unter DOS - 
taugt aber was.

von Route_66 (Gast)


Lesenswert?

Hallo!
Es werden zehn (dezimal) Werte die im internen Speicher des 8051 ab 
Adresse 10h (sechzehn) stehen im Akku (A) aufsummiert - ohne 
Übertragsbehandlung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.