![]() |
Assembler: if-Anweisung?
ich bin grad dabei, ein bisschen in assembler zu proggen, weils irgendwie auch spaß macht, und hab auch dazu ein paar tuts gelesen und auch manchen asm-code in somanchen delphiunits angeschaut.
Doch ich hab nun ein problem: eine if-abfrage kann ich mit cmp machen, sprich cmp a, b. Aber wie kann ich das nun auswerten? das ist ws in einem bestimmten Register gespeichert, aber wie heißt dieses? ich glaube mir das so vorzustellen: @@eins: //tu irgenwas cmp EAX, EBX //Vergleichen GroesserGleich //Wenns größer/gleich ist dann tu was dahinter steht //Tu was... Kann mir da jemand helfen? |
Re: Assembler: if-Anweisung?
Dazu gibt es (bedingte) Sprünge.
Zum Beispiel jne = jump if not equal Delphi: if (a <> b) then... Alle Sprünge die ich schonmal gehört habe: ;)
Code:
Hast du dir schon mal ein x86 Buch angeschaut? Da stehen dann bestimmt alle drin (falss ich welche vergessen habe).
jne jump if not equal
je jump if equal ja jump if above jna jump if not above jae jump if above or equal jnae jump if not above or equal jb jump if below jnb jump if not below jbe jump if below or equal jnbe jump if not below or equal jg jump if greater jng jump if not greater jge jump if greater or equal jnge jump if not greater or equal jl jump if less jnl jump if not less jle jump if less or equal jnle jump if not less or equal jmp oder jmps jump directly to Gibts sogar kostenlos als pdf. :P ------ Und hier gleich mal ein Link dazu: ![]() |
Re: Assembler: if-Anweisung?
das is mehr als ich brauchte! Super! Thx!
|
Re: Assembler: if-Anweisung?
Hi,
wenn ich das nun richtig verstehe müsste ich das ungefähr so machen, richtig?
Code:
Chris
cmp EAX, EAB
je IstGleich // Hier geht's weiter, wenn es nicht gleich ist PS: Hast du ein eBook im PDF-Format als Link zufällig da liegen? |
Re: Assembler: if-Anweisung?
Chakotay:
Als eBook kann ich dir nur die Handbücher von Intel anbieten (die allerdings nicht soo schlecht sind, eben nur etwas mehr als nur die ASM Befehle beinhalten), da ich im Moment keinen Plan habe wo es kostenlose ASM Lernbücher runterzuladen gibt. Und das Prinzip mit dem Jump hast du sehr gut verstanden. :D |
Re: Assembler: if-Anweisung?
Hi,
Zitat:
Zitat:
Chris |
Re: Assembler: if-Anweisung?
jup, so ca. mach ichs
z.B.:
Delphi-Quellcode:
Müsste glaub ich so gehn...
if a >= b then
... else ... //Und nun das ganze in assembler asm MOV EBX, a MOV EDX, b CMP EBX, EDX JB @@2 //Anweisungen des teiles (a >= b) = true jmp @@3 @@2: //Anweisungen des else-Teiles @@3: //und weiter gehts in der Prozedur... end; Können da eigentlich recht schlimme Dinge passieren, wenn man ein bisschen zu viel mit assembler rumspielt? |
Re: Assembler: if-Anweisung?
Solange du nicht ring0 programmierst, kannst du dir eigentlich keine Hardware zerschiessen und selbst Windows sollte sich (wie man es von einem guten OS erwartet =) selbst schützen. (Würde ich mal sagen, keine Zitate, keine Gewähr ;)
Wenn du dich jetzt fragst was ring0 ist, dann bin ich mir sicher, dass du nicht ring0 codest. *g* ------- btw, sprechende Namen helfen auch in ASM weiter =) Wenn der Code allerdings nur zum hier zeigen war, dann hab ich nichts gesagt. :P |
Re: Assembler: if-Anweisung?
Code:
Nich zu vergessen
jne jump if not equal
je jump if equal ja jump if above jna jump if not above jae jump if above or equal jnae jump if not above or equal jb jump if below jnb jump if not below jbe jump if below or equal jnbe jump if not below or equal jg jump if greater jng jump if not greater jge jump if greater or equal jnge jump if not greater or equal jl jump if less jnl jump if not less jle jump if less or equal jnle jump if not less or equal jmp oder jmps jump directly to
Code:
jz jump if zero
jnz jump if not zero jc jump if carry jnc jump if not carry jcxz jump if CX = 0 jecxz jump if ECX = 0 js jump if sign jns jump if not sign jo jump if overlow jno jump if not overflow jp jump if parity jnp jump if not parity Gruß hagen |
Re: Assembler: if-Anweisung?
Delphi-Quellcode:
EBX muss unbedingt gesichert werden. Also entweder nutzt du PUSH EBX und POP EBX, oder du verzichtest auf die Verwendung von EBX ganz (was du auch solltest). Statt EBX bieten sich hier EAX und ECX an.
if a >= b then
... else ... //Und nun das ganze in assembler asm MOV EBX, a MOV EDX, b CMP EBX, EDX JB @@2 //Anweisungen des teiles (a >= b) = true jmp @@3 @@2: //Anweisungen des else-Teiles @@3: //und weiter gehts in der Prozedur... end; Sollten A und B Integer sein, also Vorzeichen behaften dann kannste JG oder JNLE verwenden, sollten A,B Cardinals sein, dann musst du JB oder JNAE verwenden. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz