AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Assembler: if-Anweisung?

Ein Thema von Illuminator-23-5 · begonnen am 14. Okt 2003 · letzter Beitrag vom 15. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
Illuminator-23-5
(Gast)

n/a Beiträge
 
#1

Assembler: if-Anweisung?

  Alt 14. Okt 2003, 16:57
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?
  Mit Zitat antworten Zitat
Benutzerbild von nTE
nTE

Registriert seit: 8. Sep 2003
60 Beiträge
 
#2

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 17:01
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:
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
Hast du dir schon mal ein x86 Buch angeschaut? Da stehen dann bestimmt alle drin (falss ich welche vergessen habe).
Gibts sogar kostenlos als pdf. :P


------
Und hier gleich mal ein Link dazu: Intel Handbücher
  Mit Zitat antworten Zitat
Illuminator-23-5
(Gast)

n/a Beiträge
 
#3

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 17:16
das is mehr als ich brauchte! Super! Thx!
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 17:37
Hi,
wenn ich das nun richtig verstehe müsste ich das ungefähr so machen, richtig?
Code:
cmp EAX, EAB
je IstGleich
// Hier geht's weiter, wenn es nicht gleich ist
Chris

PS: Hast du ein eBook im PDF-Format als Link zufällig da liegen?
  Mit Zitat antworten Zitat
Benutzerbild von nTE
nTE

Registriert seit: 8. Sep 2003
60 Beiträge
 
#5

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 18:06
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 18:20
Hi,
Zitat von nTE:
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.
Okay. Trotzdem danke.

Zitat von nTE:
Und das Prinzip mit dem Jump hast du sehr gut verstanden.
Hehe. Das ist gut.

Chris
  Mit Zitat antworten Zitat
Illuminator-23-5
(Gast)

n/a Beiträge
 
#7

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 18:20
jup, so ca. mach ichs
z.B.:
Delphi-Quellcode:
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;
Müsste glaub ich so gehn...


Können da eigentlich recht schlimme Dinge passieren, wenn man ein bisschen zu viel mit assembler rumspielt?
  Mit Zitat antworten Zitat
Benutzerbild von nTE
nTE

Registriert seit: 8. Sep 2003
60 Beiträge
 
#8

Re: Assembler: if-Anweisung?

  Alt 14. Okt 2003, 18:26
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
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Assembler: if-Anweisung?

  Alt 15. Okt 2003, 00:10
Code:
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
Nich zu vergessen
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
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Assembler: if-Anweisung?

  Alt 15. Okt 2003, 00:12
Delphi-Quellcode:
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;
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.

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz