Hallo Macig,
hast Recht, hier war ein Dreher, in meinen Quelltext habe ich es nochmal kontrolliert.
Habe mich mit den PUSH / POP nochmal über Bücher informiert.
Danach würde doch der Ablauf so aussehen:
push r16 ; push kopiert den Inhalt von r16 auf die durch den Stapelzeiger SP adressierte SRAM Speicherstelle
; und vermindert den SP um 1
Nun steht hier weiter für den Mega8:
Der Stapelzeiger (das ist doch eine Adresse im SRAM-Bereich,oder?) wird sofort nach dem Start des Programms
auf die höchste SRAM Adresse gesetzt. In der Deklarationsdatei m8def.inc vordefiniert auf Adresse RAMEND=$045F.
Wie das beim Tiny13 aussieht, kann ich nicht erkennen, oder Datenblatt ranholen.
pop r16 ; pop erhöht erst den Stapelzeiger SP um 1 und lädt dann r16 mit dem adressierten SRAM-Byte
Interessant ist auch, daß die Befehle rcall / icall / call und Inter. die aus 2 Bytes besteh. Rücksprungadresse
auf den Stapel legen, und automatisch durch ret bzw. iret wieder entfernt werden.
Wie gesagt, man schreibt im Quelltext notorisch so viele Befehlsabläufe und wies eigentlich garnicht, was da so
richtig passiert. Alles ist natürlich auch eine Zeitfrage um sich mit der Materie zu beschäftigen.
Ich als Rentner habe die Zeit, und der Geist bleibt dadurch in Bewegung.
Das wars erst mal, hoffentlich langweilt Dich dieses Thema nicht.
Grüße
Rolf
Lesezeichen