Assembler Code verstehen [Anfänger]

OP #4630387
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.