GOTO auch noch variabel möglich?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

wie wärs mit CallFunctionFast?
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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:
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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:

Code: Alles auswählen

  !JMP [v_ziel]

wie du siehst, muss man weder ein register noch den stack mißbrauchen
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag 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
Antworten