For "loopser" Schleife wird nur 3 mal durchgelaufen ...

31/05/2010 - 19:32 von Jens Kallup | Report spam
Hallo,

folgender nasm Code làuft ein wenig falsch,
d.h. die (print)"loopser" Schleife wird nur
3 mal durchlaufen - müsste aber 4 mal durch
gehen. da 0 - 3 = 4 müsste???
schaut mal drüber und gebt bitte Feedback

Danke
Jens

BITS 32
cpu 586
%define WIN32 1
segment .text
global _start_main
_start_main:
push ebp
mov ebp, esp
sub esp, 512
CALL _null_string
fld qword [ LC0]
fstp qword [_debug]
fld qword [ LC1]
fstp qword [_var1]
fld qword [_debug]
fld qword [ LC2]
fxch st1
fucompp
fstsw ax
sahf
jne near Le1
fld qword [ LC3]
fstp qword [_var1]
push dword LCS5
call _cat_string
add esp, 4
call _print_string
call _null_string
fld qword [ LC6]
fstp qword [Lc_loopser]
LL3:
fld qword [Lc_loopser]
fld qword [_var1]
fucompp
fnstsw ax
sahf
ja near Le_4
jmp near Le_3
Le_4:
push dword LCS8
call _cat_string
add esp, 4
call _print_string ; printf "loopser"
call _null_string
fld qword [Lc_loopser]
fld1
faddp st1, st0
fstp qword [Lc_loopser]
jmp near LL3
Le_3:
jmp L1
Le1:
fld qword [ LC9]
fstp qword [_var1]
push dword LCS11
call _cat_string
add esp, 4
call _print_string
call _null_string
jmp L1
L1:
fld qword [ LC12]
fstp qword [_var1]
push dword LCS14
call _cat_string
add esp, 4
call _print_string
call _null_string
push 0
call _exit
add esp, 4
leave
ret
segment .data
LC0: dq 2.0000000000
_debug: dq 0.0
LC1: dq 4.0000000000
_var1: dq 0.0
LC2: dq 2.0000000000
LC3: dq 3.0000000000
LCS5: db "var = 3",0
Lc_loopser: dq 0.0
LC6: dq 0.0000000000
LCS8: db "loopser",0
LC9: dq 10.0000000000
LCS11: db "var = 10",0
LC12: dq 5.0000000000
LCS14: db "ende.",0
@null_value: dq 0.0
%include "kmice.inc"
 

Lesen sie die antworten

#1 Jan Seiffert
31/05/2010 - 23:19 | Warnen spam
Jens Kallup schrieb:
Hallo,

folgender nasm Code làuft ein wenig falsch,
d.h. die (print)"loopser" Schleife wird nur
3 mal durchlaufen - müsste aber 4 mal durch
gehen. da 0 - 3 = 4 müsste???
schaut mal drüber und gebt bitte Feedback

Danke
Jens

LL3:
fld qword [Lc_loopser]
fld qword [_var1]
fucompp
fnstsw ax
sahf



Floating Point vars als schleifen Zaehler?
*kopfschuettel*
Das geht nie gut...

ja near Le_4



above, above, hmmm...

Nunja, wenigstens vergleichst du nicht auf Gleichheit (bei floating point ein
grosses no-no), aber denoch, mal aus dem Bauch geschossen, hast du mal ein jae
versucht?

jmp near Le_3
Le_4:
push dword LCS8
call _cat_string
add esp, 4
call _print_string ; printf "loopser"
call _null_string
fld qword [Lc_loopser]
fld1
faddp st1, st0



Hier addierst du 1 drauf oder so??

fstp qword [Lc_loopser]
jmp near LL3
Le_3:
jmp L1




Gruss
Jan


Hifi-Strom:
"Hunderte Jungfrauen robben den ganzen Tag über einen Teppich der vom
Papst persönlich in Vollmondnàchen aus dem Fell gesegneter Làmmer und
mit Gold verwoben wurde. Die statischen Aufladungen werden in
Rosenquarzakkumulatoren gesammelt und an die Kunden geliefert."

Ähnliche fragen