
Zuerstmal: Was ist das hier?
Wie der Titel schon sagt, ist es ein anderer Ansatz für nen Selectblock.
Wichtig: Dieser muss durchgehend sein, also 0, 1, 2, 3, 4....
Nicht 0,1, 3, 5, 17....
Was macht PB:
Wert von Select einlesen
Test: Ist es 0?
Nein
Test: ist es 1?
Nein
Test.......
Bis der Richtige Wert gefunden wurde.
Ausführen....
Zum Ende springen....
Was macht dieses Hier?
Wert von Select einlesen
Wert* 4 nehmen mittels SAL
Wert vom Grundlabel addieren
Zum Label springen
Ausführen
Zum Ende Springen
Code: Alles auswählen
;|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|
;| Select-Ersatz für durchgehende Zahlenreihen |
;| Made by Franky |
;| Made with PB 4.0 |
;|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|
Global X.l=0 ;Der Anfangswert halt; Der Wert für die Select-Anweisung
;Hier kommt der Ganze Select-Kram, hier beginnt das programm zu arbeiten
neupos:
MOV ebx,x ;X ist der Wert, den Case normal hätte.
SAL ebx,2 ;Da die Differenz zwischen 2 Labelzeigern 4 beträgt (long)
ADD ebx,l_sprungmarken_select1;Nun noch das Grundlabel addieren
JMP dword[ebx] ;Und Zum zeiger springen, der an der Stelle angegeben ist
endpos:
MessageRequester("Glückwunsch","Sie haben es soeben geschafft, das Programm zu beenden")
End
;Section mit den Case-Anweisungen
;Diese Labels stellen die eigentlichen Teile dar, die In Case aufgerufen werden
;-------------------------------------------------------------------------------------
Case_0:
MessageRequester("Ergebnis:","Das Ergebnis ist 0")
JMP l_endpos ;Hinspringen, wo das Programm weiter gehen soll, in diesem Falle wieder zum Anfang
Case_1:
MessageRequester("Ergebnis:","Das Ergebnis ist 1")
JMP l_endpos
Case_2:
MessageRequester("Ergebnis:","Das Ergebnis ist 2")
JMP l_endpos
Case_3:
MessageRequester("Ergebnis:","Das Ergebnis ist 3")
JMP l_endpos
Case_4:
MessageRequester("Ergebnis:","Das Ergebnis ist 4")
JMP l_endpos
;-----------------------------------------------------------------------------------
DataSection
sprungmarken_select1:
Data.l ?Case_0,?Case_1,?Case_2,?Case_3,?Case_4
EndDataSection
Was bringt das?
Speed.
In meinem Beispiel ist es glaub ich noch etwas langsamer, als die herkömmliche Variante.
Da aber bei dieser Herkömmlichen bei durchgehender Reihe abgefragten Selectsache ein
Code: Alles auswählen
MOV ebx,1
CMP ebx,[esp]
JNE _Case2