Assembler Code verstehen [Anfänger]

OP #4630387
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!
Gast #4630415
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
#4630421
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 ;-)

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