Kann in einem unterprogramm ein weiterer "call" Befehl stehen?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 11 2024  03:34:35      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Kann in einem unterprogramm ein weiterer "call" Befehl stehen?

    







BID = 567754

JRJ

Gesprächig



Beiträge: 132
Wohnort: Ebbs
 

  


Programmiersprache:
Assembler von Microchip

Kann in einem unterprogramm ein weiterer "call" Befehl stehen?

_________________
Wer in meinem Text Rechtschreibfehler findet darf sie behalten!

BID = 567838

Wusel_1

Stammposter

Beiträge: 220

 

  

Hallo JRJ,
ich programmier zwar nicht mit dem Assembler von Microchip, habe mir aber mal die Befehlstruktur angesehen. Ausgehend davon und von der Assemblerprogrammierung des Z80 ist es eigentlich immer möglich aus einem Unterprogramm ein weiteres Unterprogramm aufzurufen. Du kannst auch im Unterprogramm ein Goto-Befehl benutzen, nur muss dieses Programm dann mit RET enden, damit der Rücksprung wieder in das Programm erfolgt, wo der Call-Befehl stand.

MfG Wusel_1


_________________
DL9UNF
ex Y22MF es Y35ZF
LOC - JO42VP
DOK - Y43

BID = 567849

DG3YCS

Gerade angekommen


Beiträge: 8
Wohnort: Steinfurt


Zitat :
JRJ hat am 27 Nov 2008 13:28 geschrieben :

Programmiersprache:
Assembler von Microchip

Kann in einem unterprogramm ein weiterer "call" Befehl stehen?


Hi,

Für die PIC Serie (Ich vermute mal darauf zielt deine Frage ab) kann ich sagen das es definitiv möglich ist mehrere Unterprogramme zu verschachteln.
Es ist aber die STACK Tiefe zu berücksichtigen (Anzahl der verschachtelten CALL-Befehle) und auf einen sauberen Rücksprung zu achten.

Gruß
Carsten

BID = 567997

Racingsascha

Schreibmaschine



Beiträge: 2247
Wohnort: Gundelsheim
ICQ Status  

Jepp, das geht, Allerdings gehen maximal nur 8 Call-Stufen (Verschachtelungen), sonst läuft der Stack über. Falls du Interrupts nutzst, darfst du nur 7 Stufen benutzen, sonst läuft der Stack bei einem Interrupt in der 8. Stufe über. -> PIC stürzt ab, bzw macht Murks.

Also entweder

Code :

.

.
.
call marke1
.
.
.
marke1
call marke 2
return
.
.
.
marke2
mowlw 0xC6
return

Es wird zu marke1 gesprungen, dann zu marke2, dann wird der mowlw ausgeführt. Dann gehts zurück zu marke1 und zum Hauptprogramm.

Oder

Code :

.

.
.
goto marke1
zurück1
.
.
.
marke1
goto marke2
zurück2
goto zurück1
.
.
.
marke2
movlw 0xC6
goto zurück2


Es wird zu marke 1 gesprungen, dann zu marke2, wo wieder movlw ausgeführt wird. dann wird zu zurück 2 gesprungen, von wo aus wieder zur Fortsetzung des Hauptprogramms gesprungen wird.

_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.

BID = 568009

selfman

Schreibmaschine



Beiträge: 1681
Wohnort: Seekirchen a. W.

Das ist nicht nur bei den Controllern von Microchip so, sondern bei allen mir bekannten Prozessoren, die einen CALL Befehl kennen!

So ein Befehl macht im Grunde auch nichts anderes als ein JUMP (GOTO) Befehl, nämlich das die im Befehl angegebene Adresse in den Programmcounter (PC) geladen wird. Nur mit dem Unterschied, daß die Adresse, von der der Sprung ausgeführt wird (genau genommen, die Adresse nach dem Befehl) abgepeichert wird. Und dazu wird der aktuelle Inhalt des PC's auf den Stack "gepush't".
Wenn jetzt in der aufgerufenen Routine ein weiterer solcher Befehl auftritt, dann geschieht das Gleich nochmal, und nochmal, und nochmal, .... Mit dem dann notwendigen "RETURN" Befehl wird in umgekehrter Reihenfolge der PC wieder mit der am Stack zuletzt speicherten Adresse geladen (POP), und das Programm macht einen Befehl hinter dem Aufruf durch den CALL Befehl weiter. Das ist dann der Rücksprung.

Wie man sieht brauch man also für jeden weiteren Unterprogrammaufruf einen Speicherplatz für die Rücksprungadresse, und somit wächtst der Stackinhalt immer weiter an. Das kann im Extremfall zum "Stackoverflow" führen, und dann stürzt das Programm ab, weil die Rücksprungadresse nicht mehr gespeichert werden kann.

Allerdings muß man bei händisch geschriebenen Assemblerprogrammen es schon ganz schön bunt treiben, bis das man das erreicht. Gefährlich sind in diesen Belangen eher noch rekursive Programme, also Programme, die sich ganz oder zum Teil immer wieder selber aufrufen und sich damit wie eine Schleife immer weiter einwickeln, bis eine Ende Bedingung erreicht ist und dann die ganze Schleife wieder zurückt rauslaufen. Da kann es schnell mal passieren, daß der Stack überquillt, weil ja je nach Bedingung sich das Programm 10x, 100x, 1000x, oder noch öfter sich selber aufruft und damit eben ein CALL Befehl ausgeführt wird.

PS: Racingsascha hat mich jetzt wieder ein bißchen runtergeholt! Das hatte ich jeztt vergessen, daß die einfachen Microcontroller nicht so viel Speicherplatz bieten und der Stacktbreich auch nicht frei gewählt werden kann, zumindest nicht bei den kleineren Typen.

Schöne Grüße Selfman


[ Diese Nachricht wurde geändert von: selfman am 27 Nov 2008 22:26 ]

BID = 568108

JRJ

Gesprächig



Beiträge: 132
Wohnort: Ebbs

Danke für die Antworten!


_________________
Wer in meinem Text Rechtschreibfehler findet darf sie behalten!

BID = 568147

kea5

Stammposter

Beiträge: 356

Hallo,


Offtopic :
Schonung ist angesagt, der Junge ist doch erst dreizehn und kann noch nicht so gut lesen, also nicht überfordern:

https://forum.electronicwerkstatt.de.....63104


Gruß

[ Diese Nachricht wurde geändert von: Jornbyte am 28 Nov 2008 18:51 ]


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 1 Beiträge verfasst
© x sparkkelsputz        Besucher : 182421331   Heute : 370    Gestern : 5459    Online : 281        29.11.2024    3:34
0 Besucher in den letzten 60 Sekunden         ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0572209358215