Programmabsturz die 2te

21/02/2009 - 14:58 von Jens Kallup | Report spam
Hallo

das programm bleibt weiterhin stecken ...
es kommt bis "call _init_class" und dann meldet windows einen fehler
"Programm.Exe funktioniert nicht mehr" ...
Einsatz unter Vista Home ...
kann da jemand durchblicken?
Danke für Hilfe jedlicher Art ...
Jens

die Fix2Gleit Source:

bits 32
cpu 486
section .data
zehn: dd 10
section .text
global Fix2Gleit
Fix2Gleit:
mov [ebx], edx ; Vorkomma
mov [ebx+4], eax ; Nachkomma

; Anzahl der Dezimalstellen der Nachkommazahl bestimmen
push ebx
mov ebx, 10
xor ecx, ecx
.1:
inc ecx
xor edx, edx
div ebx
test eax, eax
jne .1

; Den Divisor für die FPU bestimmen
mov eax, 1
mov ebx, 10
.2:
mul ebx
loop .2
mov dword [zehn], eax
pop ebx

fild dword [ebx+4] ; Nachkommazahl
fidiv dword [zehn] ; Nachkommazahl in Realzahl umwandeln
fiadd dword [ebx] ; Vorkommazahl hinzu
fstp qword [ebx] ; Ergebnis als Double abspeichern
ret



die start.asm sourcen


global _start_main
_start_main:
push ebp
mov ebp, esp
call LClassName_masterforma
leave
ret

LClassName_masterforma:
push ebp
mov ebp, esp
sub esp, 32

sub esp, 4
fld qword [LClassID_masterforma]
fstp qword [esp + 8]
call _init_class
add esp, 8


mov edx, 200 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, Ergebnis
call Fix2Gleit
push dword [ebx+4]
push dword [ebx]
call _set_Ergebnis_Wert
add esp, 8


fld dword [LClassID_masterforma]
fstp qword [esp]
fld dword [_ErgebnisWert]
fstp qword [esp + 8]
fld dword [LClassProperty_masterforma__top]
fstp qword [esp + 16]

call _set_this_wert

leave
ret



float ErgebnisWert = 0.0;

extern "C" void set_Ergebnis_Wert(float dbl)
{
printf("OO>");
ErgebnisWert = dbl;
printf("d: %.4f",dbl);
}

extern "C" void set_this_wert(float w, float wert, float pt)
{
int win = QString("%1").arg(w).toInt();

printf(" >>->>");
printf("--> %d :: %f, %f, %f",win,w,wert,pt);
..
}
 

Lesen sie die antworten

#1 Hubert Seidel
21/02/2009 - 19:53 | Warnen spam
Hallo Jens,

"Jens Kallup" schrieb im Newsbeitrag
news:gnp18r$4p3$

das programm bleibt weiterhin stecken ...
es kommt bis "call _init_class" und dann meldet windows einen fehler


...
LClassName_masterforma:
push ebp
mov ebp, esp
sub esp, 32

sub esp, 4
fld qword [LClassID_masterforma]
fstp qword [esp + 8]



fstp qword [ebp - 8] Besser so?

call _init_class
add esp, 8



Folgender Gedankengang bei ESP und EBP:

Eine aufgerufene Funktion merkt sich in EBP den aktuellen Stackpointer
damit dieser beim Verlasen der Funktion wieder restauriert werden kann,
und verwendet dieses als "B"asis"P"pointer um auf lokale Variablen
zu zugreifen. Also nicht ESP+Irgendwas, sodern EBP-Irgendwas angewöhnen.

mfg.
Herby

http://www.hubert-seidel.eu

Ähnliche fragen