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!
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
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 ;-)
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
> Edit: Pech, Zweiter..... ;-)
Ich glaube, daß kann man ruhig öfter erwähnen ;-)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.