mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe benötigt


Autor: Georg Steiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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.
cseg at 0
Segement ab Adresse 0?

start:   mov  R5, #10
In das Register R5 wird der Wert 10 (hexadezimal wohl, also 16) 
geschrieben.
mov  A, #0
In den Akkumulator wird der Wert 0 geschrieben.
mov  R0, #10h
In das Register R0 wird #10 geschrieben.
loop:     add  A, @R0
Hier fängt die Schleife an. Es wird zum aktuellen Wert des Akkumulators 
jeweils der Wert des Registers R0 addiert.
inc   R0
Das Register R0 wird um 1 hochgezählt.
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.
stop:     jmp   stop
end
Und nu isses zu Ende. :-)

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach Mist, zu langsam. Und wohl eh falsch ;-)

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Mnemonics sehen übrigens stark nach MCS51 aus (8051-Serie)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
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...

Autor: Niels Keller (niels-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Route_66 (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.