statisch ok, dynamisch crash :-(

15/07/2010 - 00:09 von Jens Kallup | Report spam
Hallo,

habe versucht Code-Tuning zu machen: Das Ergebnis siehe unten ...
wenn ich "mov ebx, 0" an den kommentierten zeilen mache und
statisch programmiere, wird die schleife einwandfrei durchlaufen,
wenn ich aber "mov ebx, _i_var" versuche: crasht es.
debuggen kann ich das Programm nicht, da fehlt mir irgendwie der
rote Faden.
vieleicht ist auch an anderer Stelle was verkehrt?


extern "C" EXPORT int _ftol(double w) { return (int)1; }


_i_var: dd 0

fld QWord [LC87]
fstp QWord [_i]

Le49:
L50:
fld qword [_i]
fld QWord [LC88]
fxch st1
fucompp
fstsw ax
sahf
je near Le50
L52:
fld qword [_i]
fstp qword [esp]
; prüfen ob Daten stimmen ...
mov dword eax, [_aalpha_AsmArrayListe]
mov ebx, _i_var ; <-- hier
shl ebx, 4
add eax, ebx

; mov dword eax, [eax + 0 * 16 + 0]

cmp eax, 1 ; if expr?
jnz near Lb52

mov dword eax, [_aalpha_AsmArrayListe]
mov ebx, _i_var ; <-- hier .. ff.
shl ebx, 4
add eax, ebx
add eax, 8
mov ebx, eax

mov dword eax, [_aalpha_AsmArrayListe]
mov ebx, _i_var
shl ebx, 4
add eax, ebx
add eax, 12
mov ecx, eax

mov dword [_varr_expr ], ebx
mov dword [_varr_expr +4], ecx
mov dword [_varr_vartype], 1
jmp near Lb53
Lb52:
mov dword eax, [_aalpha_AsmArrayListe]
mov ebx, _i_var
shl ebx, 4
add eax, ebx
add eax, 8
mov ebx, eax

push dword [ebx]
push @strfmt
call _printf
add esp, 8
jmp near Lb53
Lb53:
L53:
fld qword [_i]
fld QWord [LC89]
faddp
fstp QWord [_i]
fstp qword [esp]
call __ftol
mov dword [_i_var], eax


cmp dword [_varr_vartype], 1
jnz near Lb55

fld qword [_varr_expr]
fstp qword [esp]
push @dblfmt ; "%g"
call _printf
add esp, 12
jmp Lb56
Lb55:
Lb56:
jmP near Le57
Le57:
jmp Le49
Le50:
 

Lesen sie die antworten

#1 Dirk Wolfgang Glomp
15/07/2010 - 08:21 | Warnen spam
Am Thu, 15 Jul 2010 00:09:24 +0200 schrieb Jens Kallup:

Hallo,

habe versucht Code-Tuning zu machen: Das Ergebnis siehe unten ...
wenn ich "mov ebx, 0" an den kommentierten zeilen mache und
statisch programmiere, wird die schleife einwandfrei durchlaufen,
wenn ich aber "mov ebx, _i_var" versuche: crasht es.
debuggen kann ich das Programm nicht, da fehlt mir irgendwie der
rote Faden.
vieleicht ist auch an anderer Stelle was verkehrt?


extern "C" EXPORT int _ftol(double w) { return (int)1; }


_i_var: dd 0

fld QWord [LC87]
fstp QWord [_i]

Le49:
L50:
fld qword [_i]
fld QWord [LC88]
fxch st1
fucompp
fstsw ax
sahf
je near Le50
L52:
fld qword [_i]
fstp qword [esp]
; prüfen ob Daten stimmen ...
mov dword eax, [_aalpha_AsmArrayListe]
mov ebx, _i_var ; <-- hier



Hast du es schon mal mit Klammern ausprobiert?

mov dword ebx, [_i_var]

Hier wird über DS adressiert, wo wird DS auf den Dantenbereich gelegt?

Dirk

Ähnliche fragen