FOR Schleife geht nicht :(

27/12/2009 - 04:38 von Jens Kallup | Report spam
Hallo,

habe da eine FOR Schleife, die nicht funktioniert:

fldz
fstp qword [_var1]
LL2:
fld qword [_var1]
fld qword [LCC11]
fcompp
fnstsw ax
sahf
ja Le_5
jl near Le_1

push dword LCS05
call _cat_string
add esp, 4
call _print_string
call _null_string
jmp near Le_1

Le_5:
fld qword [_var1]
fld qword [LCC22]
faddp st1, st0
fstp qword [_var1]
jmp LL2
Le_1:

irgendwas scheint da falsch zu sein.
Für sachdienliche Hinweise bin ich dankbar.

Gruß
Jens

Benutzer Assembler: NASM
OS: Windows Vista
 

Lesen sie die antworten

#1 Markus Wichmann
27/12/2009 - 11:04 | Warnen spam
Jens Kallup () schrieb:
Hallo,

habe da eine FOR Schleife, die nicht funktioniert:

fldz
fstp qword [_var1]



d.h. var1 := 0;

LL2:
fld qword [_var1]


Stack: var1
fld qword [LCC11]


LCC11 : var1

fcompp



Sicher? Nicht fucompp? In jedem Fall ist der Stack danach leer.
fnstsw ax
sahf
ja Le_5



if LCC11 > var1 goto Le_5

jl near Le_1



Scheint so, als würdest du da was vermischen: Die Opcodes

ja
jb
jna
jnb
jae
jnae
jbe
jnbe

tun nur dann das, was der Name vermuten làsst, wenn die Flags mittels

fnstsw ax
sahf

aus dem x87 Status Word kommen. Man könnte sagen, die sind nur bei
FPU-Operationen sinnvoll. Die Opcodes

jl
jg

und so weiter hingegen bringen nur bei Integer-Operationen etwas. SF und
OF sind bei obiger Anweisung undefiniert, aber jl bedeutet
"jump if SF <> OF".

push dword LCS05
call _cat_string
add esp, 4
call _print_string
call _null_string
jmp near Le_1

Le_5:
fld qword [_var1]
fld qword [LCC22]
faddp st1, st0
fstp qword [_var1]



D.h. var1 := var1 + LCC22

jmp LL2
Le_1:

irgendwas scheint da falsch zu sein.
Für sachdienliche Hinweise bin ich dankbar.

Gruß
Jens




HTH,
Markus

P.S.: Das hier:

OS: Windows Vista



ist fast nie schuld.


Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.

news://freenews.netfront.net/ - complaints:

Ähnliche fragen