Seite 4 von 5

Verfasst: 25.11.2005 20:55
von Deeem2031
Ja, bis auf Zeile 2. Wieso sollen da Sachen stehen die bei nicht erfüllter Bedingung ausgeführt werden? Das wär ja dann schon ein Else, wobei dann aber ein JMP vor der 2. Zeile fehlen würde.

Aber wenns euch wirklich so interessiert könntet ihr auch einfach mal den Output von Purebasic analysieren:

Code: Alles auswählen

If A = B
  x = 0
Else
  x = 1
EndIf

Code: Alles auswählen

 MOV ebx,dword [v_A] ;Schreib A in Register Ebx
 CMP ebx,dword [v_B] ;Vergleiche Ebx mit B (CMP dword [v_A],dword [v_B] funktioniert nicht)
 JNE _EndIf2         ;Wenn a!=b springe zum Else
 MOV dword [v_x],0   ;x = 0
 JMP _EndIf1         ;Springe zum Endif, da sonst das Else auch ausgeführt werden würde
_EndIf2:             ;Else
 MOV dword [v_x],1   ;x = 1
_EndIf1:             ;Endif
Und im fertigen Programm sieht das dann so aus:

Code: Alles auswählen

0040106B  |. 8B1D 88214000  MOV EBX,DWORD PTR DS:[402188]
00401071  |. 3B1D 8C214000  CMP EBX,DWORD PTR DS:[40218C]
00401077  |. 75 0C          JNZ SHORT PureBasi.00401085
00401079  |. C705 90214000 >MOV DWORD PTR DS:[402190],0
00401083  |. EB 0A          JMP SHORT PureBasi.0040108F
00401085  |> C705 90214000 >MOV DWORD PTR DS:[402190],1

Verfasst: 25.11.2005 23:51
von Batze
Achso, alles klar. Danke. :D

Verfasst: 26.11.2005 20:10
von strgalt
Nabend zusammen,

also den Spaß konnte ich mir ja auch nicht verkneifen. Bin auch der Meinung, dass es hier ne Grenze gibt. Mehr als 200 ineinander verschachtelte IF´s bekomm ich nicht hin, dann kackt der Compiler ab - und das bei nem Barton 3000+, 1 GB RAM und 240 GB freien Plattenspeicher

Verfasst: 26.11.2005 20:25
von Hellhound66
Frage: Kackt er beim compilen ab oder beim ausführen?
Wenn er beim compilen abkackt, würd ich sagen, dass der Compiler hier einfach an seine Grenze stößt und z.B. durch einen Stack Overflow abstürzt, wenn er die IF Umsetzung rekursiv geschrieben hat.
Wenn er beim ausführen abstürzt, wird der Code einfach nur falsch compiled worden sein, was auf einen unsauberen Compiler zurückzuführen ist und evtl. auf Punkt 1 zurückzuführen ist.

/edit:
Zumal, wenn ich mir den Asm Output von Deem anschaue, dann sollten hier keine Probleme mit beliebig verschachtelten IFs auftreten.

Verfasst: 26.11.2005 21:12
von strgalt
vermute stark das es am Stack liegt, was ein unsauberes compilieren aber dennoch nicht ausschließt.

Er stürzt beim compilieren ab. das fenster, dass compeliert wird bleibt auch stecken.

Verfasst: 26.11.2005 22:04
von sen-me
ist aber eigentlich egal, zeig mir mal einen der 200 ifs braucht, und zwar ineinander...

Verfasst: 26.11.2005 22:36
von strgalt
nun, ist ja auch nicht mehr die Grage wer sie braucht, sondern eher, warum der compiler aussteigt

Verfasst: 26.11.2005 22:42
von MVXA
Villt. ne KI, die erkennt, dass das total sinnlos ist und sich dann beendet :lol: ?

Verfasst: 26.11.2005 23:48
von Sylvia
1) Kiffi hat recht

2) Unbegrenzt

Verfasst: 27.11.2005 10:32
von Hellhound66
3) Ja

4) Ach doch nicht, weil MXVA recht hat

5) Wo war ich?

6) Nö