Seite 1 von 1
RET nur ein vom CALL Modifizierter JMP
Verfasst: Sa 14. Feb 2015, 09:35
von PIC18F2550
Bei meinem Versuch den CODE des propellers besser zu verstehen zeigen sich seltsame ergebnisse.
Ist der RET nur ein vom CALL Modifizierter JMP ?
Code: Alles auswählen
010111 000i 1111 --------- sssssssss JMP S
010111 0001 1111 --------- --------- RET
Und wieder stößt sich alles am ominösen i.

Re: RET nur ein vom CALL Modifizierter JMP
Verfasst: Sa 14. Feb 2015, 10:23
von drohne235
Jo, genau so ist es. Da die Cog ja keinen Stack hat, modifiziert Call den entsprechenden Jmp, also die Rücksprungadresse. Ist quasi wie ein verteilter Stack.
Re: RET nur ein vom CALL Modifizierter JMP
Verfasst: Sa 14. Feb 2015, 11:05
von PIC18F2550
Und genau deshalb verstehe ich nicht den Sinn des i Bits.

Re: RET nur ein vom CALL Modifizierter JMP
Verfasst: Sa 14. Feb 2015, 11:49
von drohne235
Naja, das i-Bit (immediate) definiert den Verarbeitungsmodus für das Sourcefeld im Befehlscode. Abhängig von diesem Bit wird der 9 Bit Wert im S-Feld als direkter, eingebetteter Parameter (immediate), oder als Adresse zu dem Parameter in einem Cog-Register interpretiert.
RET ist dabei quasi ein JMP mit gesetztem i-Bit und
CALL ist ein JMPRET mit gesetztem i-Bit.
Beide Befehle (Call/Ret) sind Assembler Makros, welche die Bezeichner in die entsprechenden Zielbefehle (JMP/JMPRET) umsetzen. Im Prinzip kannst du es überprüfen, indem du statt Call und Ret manuell einfach JMPRET und Ret setzt - funktioniert analog den Makros.
Re: RET nur ein vom CALL Modifizierter JMP
Verfasst: Sa 14. Feb 2015, 12:10
von PIC18F2550
OK jetzt klährt sich alles langsam auf.
Der Unterschied ist nur in den d und s Elementen zu finden.
(nicht zur Laufzeit)
Beim RET sind d und s = 0,
Beim JMP ist nur d = 0
i = 1 ===> JMP nnn
i = 0 ===> JMP(nnn)
Analog des Z80
Fürs erste werd ich daher CALL und RET misachten
