Seite 3 von 3
Verfasst: 12.09.2007 07:34
von Thorium
Solange man nur innerhalb der Prozedur springt kann nix passieren. Wenn du aber von einer Prozedur in eine andere springst und dort auf lokale Variablen zugreifst, wird das unweigerlich zu schweren Fehlern führen. Da die lokalen Variablen auf dem Stack liegen.
Verfasst: 12.09.2007 08:41
von Christi
wie wärs mit CallFunctionFast?
Verfasst: 13.09.2007 06:52
von Thorium
Christi hat geschrieben:wie wärs mit CallFunctionFast?
Sehr schlechte Idee. Das ist kein GoTo sondern praktisch ein GoSub. Der Unterschied ist das beim GoSub (Assembler: Call) eine Rücksprungadresse auf den Stack gepusht wird. Würdest du nun CallFunctionFast missbrauchen um zu einem Label zu springen währen alle lokalen Variablen auf dem Stack um 4 Byte verschoben. Das einzige was wirklich Sinn macht ist in der tat ein echtes GoTo also Assembler: Jmp. Das geht auch ohne den Inline-Assemblersupport zu aktivieren.
Code: Alles auswählen
Define.l JmpDest
JmpDest = ?Blub
!mov eax,[p.v_JmpDest]
!jmp eax
Blub:
Das geht auch ohne das EAX-Register zu ändern.
Code: Alles auswählen
Define.l JmpDest
JmpDest = ?Blub
!push [p.v_JmpDest]
!ret
Blub:
Verfasst: 13.09.2007 11:06
von Kaeru Gaman
@Thorium
tja, das kommt davon, wenn man aus faulheit die erste seite des topics nicht mehr liest...
http://www.purebasic.fr/german/viewtopi ... 608#169608
Kaeru Gaman hat geschrieben:
wie du siehst, muss man weder ein register noch den stack mißbrauchen
Verfasst: 13.09.2007 11:13
von Christi
Thorium hat geschrieben:Das ist kein GoTo sondern praktisch ein GoSub. Der Unterschied ist das beim GoSub (Assembler: Call) eine Rücksprungadresse auf den Stack gepusht wird...
is mir schon klar... nimmt man halt keine labels