Fehler im ProgrammCode ...

21/07/2008 - 11:41 von Jens Kallup | Report spam
Hallo,

habe hier einen Fehler im Programmcode, den ich nicht lokalisieren kann ...
für Tips und Tricks bin ich euch dankbar!
Das Ergebnis müsste 15 ('5+2+2*2*2') sein ...

Ausgabe auf der Console:
c=a*b, a=7.0000000000
c=a*b, a=4.0000000000
c=a*b, a=8.0000000000
c=a*b, a=7.0000000000

MfG
Jens

BITS 32
cpu 486

section .data
global a,b,c
v1: dq 1.0
v2: dq 1.0
v3: dq 1.0
v4: dq 1.0
v5: dq 1.0

section .text
extern Fix2Gleit, Ausgabe
global _main
_main:
push ebp
mov ebp, esp
sub esp, 32
; a = 5.0
mov edx, 5 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v1
call Fix2Gleit
fld qword [v1]
; a = 2.0
mov edx, 2 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v2
call Fix2Gleit
fld qword [v2]
fadd qword [v1]
fstp qword [v2]
call Ausgabe
; a = 2.0
mov edx, 2 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v3
call Fix2Gleit
fld qword [v3]
; a = 2.0
mov edx, 2 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v4
call Fix2Gleit
fld qword [v4]
fmul qword [v3]
fstp qword [v4]
call Ausgabe
; a = 2.0
mov edx, 2 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v5
call Fix2Gleit
fld qword [v5]
fmul qword [v4]
fstp qword [v5]
call Ausgabe
fadd qword [v1]
fstp qword [v5]
call Ausgabe
leave
ret

EXTERN _printf, a,b,c

SECTION .data
fm2: db "%s, a=%.10f",10,0
str: db "c=a*b",0

SECTION .text
Ausgabe:
push dword [ebx+4] ; double a (bottom)
push dword [ebx] ; double a
push str ; users string
push fm2 ; address of format string
call _printf ; Call C function
add esp,16 ; pop stack 8*4 bytes
ret
 

Lesen sie die antworten

#1 Jens Kallup
21/07/2008 - 15:05 | Warnen spam
So, habe mal ein weiteres Problem (im code siehe kommentar unten)
...

c=a*b, a=4.0000000000 ; müsste 5 sein
c=a*b, a.0000000000
c=a*b, a=-1.#IND000000 ; und hier als Ergebnis 17

('5+2*2*3')

Gruß
Jens

BITS 32
cpu 486

extern _printf, _test_wert

section .data
global a,b,c
v0: dq 1.0
v1: dq 1.0
v2: dq 1.0
v3: dq 1.0
v4: dq 1.0
v5: dq 1.0

section .text
extern Fix2Gleit, Ausgabe
global _main
_main:
push ebp
mov ebp, esp
sub esp, 32
; a = 5.0
mov edx, 5 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v1
call Fix2Gleit
fstp qword [v0]
fld qword [v1]

; a = 2.0
mov edx, 2 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v2
call Fix2Gleit
fld qword [v2]

; a = 2.0
mov edx, 2 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v3
call Fix2Gleit
fld qword [v3]
fmul qword [v2]
fstp qword [v3]
call Ausgabe

; a = 3.0
mov edx, 3 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, v4
call Fix2Gleit
fld qword [v4]
fmul qword [v3]
fstp qword [v4]
call Ausgabe

; hier wie weiter...??
fstp qword [v4]
fld qword [v1]
fadd qword [v0]
fstp qword [v4]
call Ausgabe
leave
ret

Ähnliche fragen