Forum: Mikrocontroller und Digitale Elektronik Assembler Code verstehen [Anfänger]


von Andi S. (andflat)


Lesenswert?

Hi

Versuche mich grade in Assembler Code einzuarbeiten hab aber hier und da 
noch Probleme den Code zu verstehen.

Eventuell kann mir jemand dabei weiterhelfen. Hier mal ein Beispiel
(mir unbekannte Befehle sind ??)

     org OH           --> ??
RES:     JMP     STAR     --> Routine RES springt in Routine STAR
     org 100h   --> ??
STAR
     MOV     R0,#07H  --> Wert 7 wird Register 0 geschrieben
     MOV      A,#09    --> Wert 9 wird in Akkumulator geschrieben
     INC     A        --> Akku wird um 1 hochgezählt = 10
     INC        A   --> Akku wird um 1 hochgezählt = 11
loop:     MOV     @R0,A    --> ??
     INC     A        --> Akku wird um 1 hochgezählt
     DJNZ     R0,loop

--> Register 0 wird um 1 dekrementiert. Bei    ungleich 0 wird an den 
Anfang der Loop Routine gesprungen. bei gleich 0 wird fortgefahren mit 
nächster Zeile

     MOV     @R0,A    --> ??
     DEC     A        --> Akku wird um 1 dekrementiert
     MOV     SP,#0DH  --> ??


Danke für eure Hilfe!

von Peter D. (peda)


Lesenswert?


von TomA (Gast)


Lesenswert?

Hallo Andi.

org steht für origin (Ursprung) und setzt die Übersetzungsadresse auf 
den angegeben Wert:

org 0h = Adresse 0000h, org 100h = Adresse 0100h

Damit steht der Label "RES" für Adresse 0 und der Label "STAR" für 
Adresse 0100h.

MOV     @R0,A    --> ?? ist indirekte Adressierung. Der Inhalt des Akku 
wird in die Speicherzelle geschrieben, auf welche Register 0 zeigt. In 
der Regel ist das die Speicherpage 0 (256Byte von Adr. 0000h bis 00FFh).

MOV     SP,#0DH  --> ?? lädt den Stackpointer mit dem Wert 0Dh. Damit 
wird der Stack eingerichtet und beginnt bei Adresse 0Fh (0Dh +1).

Gruß. Tom

von Michael S. (captain-stone)


Lesenswert?

Hallo Andi,

> Versuche mich grade in Assembler Code einzuarbeiten hab aber hier und da
> noch Probleme den Code zu verstehen.

"hier und da" ist gut ;-)

>      org OH           --> ??

'ORG' steht für 'Origin' auf Deutsch Ursprung. Bei 0h (Du hast ein O 
geschrieben, das soll aber bestimmt eine 0 (null) sein) beginnt der 
Prozessor das Programm abzuarbeiten.

> RES:     JMP     STAR     --> Routine RES springt in Routine STAR
>      org 100h   --> ??

Es steht also an Adresse 0h ein Sprung zur Adresse 100h (hier wieder ein 
'ORG'. Und das ist keine 'Routine' wie Du schreibst, sondern nur eine 
Adresse, an die gesprungen wird. Eine Routine würde wieder an die Stelle 
zurückkommen. Das passiert hier aber nicht. Auch 'RES' ist keine 
Routine. Nur ein 'Label', um die Stelle besser anspringen zu können.

Zwischen der Adresse 0h und 100h befindet sich kein Programm.
...

Ich denke, Du solltest zuerst am Anfang beginnen. Benutze eine 
Suchmaschine, da findest Du ganz viele Einführungen in Assembler für 
Deinen Controller (den solltest Du bei Fragen auch dazuschreiben). Dann 
werden sich die Fragezeichen ganz schnell in Ausrufezeichen ändern.

Finde ich klasse, daß Du Dich mit Assembler beschäftigst - das wird Dir 
später in höheren Programmiersprachen zu Gute kommen. Nur nicht 
aufgeben,

der Captain ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andi S. schrieb:
> springt in Routine
In dem ganzen Programm oben gibt es eigentlich keine einzige "Routine". 
Dort wird jedesmal nur zu einem "Label" (=Marke, Sprungmarke) 
gesprungen.  Eine Routine wird mit einem call aufgerufen und mit einem 
ret beendet.

Edit: Pech, Zweiter..... ;-)

: Bearbeitet durch Moderator
von Michael S. (captain-stone)


Lesenswert?

> Edit: Pech, Zweiter..... ;-)

Ich glaube, daß kann man ruhig öfter erwähnen ;-)

von TomA (Gast)


Lesenswert?

Hallo Andi,

hier noch ein Link zu einer Beschreibung der Hardware und Befehle der 
MCS51 auf deutsch. "MCS51LB.PDF" ist das entsprechende Dokument.

Beitrag "MCS51-Kurs sinnvoll?"

Viel Erfolg und Spaß. Tom

von Rainer V. (rudi994)


Lesenswert?


von Andi S. (andflat)


Lesenswert?

super geil danke für die Erklärungen! Habs kapiert

: Bearbeitet durch User
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.