Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 21994

exe file exits, nasm program working fine

$
0
0

I've got problem, I can compile these programs:

  • assembly program

    ;WZOR NA PI: 4 (1 - 1/3 + 1/5 - 1/7 + 1/9...)
    
    section .text use32
    
        global  _liczbae
    
        _liczbae:
    
        ; WZOR: e = 1 + (1^2/2!) + (1^3/3!) + (1^4/4!) + ...
    
        ; po wykonaniu push ebp i mov ebp, esp:
        ; [ebp]    old EBP location
        ; [ebp+4]  return point from procedure
        ; [ebp+8]  the first parameter of the procedure,
        ; [ebp+12] the second parameter of the procedure
    
        push    ebp
    mov ebp, esp ; ramka stosu
    
        finit   ; inicjalizacja FPU
    
    fild dword [ebp+8] ;  ładujemy int n do st0
    
    ftst        ; sprawdzamy czy n == 0
    fstsw ax    ; zapisujemy stan FPU do AX
    sahf        ; wrzucamy rejestr AH do rejestru flag
    fstp dword [n]      ; zapisujemy st0 pod adresem [n] i zrzucamy st0 ze stosu
    je koniec   ; jezeli rozne to petla
    
        fld1   ; ładujemy 1.0f do st0 - silnia
    fld dword [podstawa]  ; ładujemy wynik do st0 //
    fld1   ; ładujemy  temp do st0 //
    
    petla:
    ; st2 = silnia - 1
    ; st1 = wynik - 1
    ; st0 = temp - 1
    
    fld1    ; ładujemy 1.0f na stos
    faddp st3, st0  ; st3 = st3 + st0 i st0 zdejmujemy ze stosu (++silnia)
    
    fdiv st0, st2 ; temp = temp/silnia
    
    fadd st1, st0; wynik += temp
    
    fld dword [n]       ; ładujemy wartość n na st0
    fld1            ; ładujemy 1.0f do st0
    fsubp           ; st1 = st1 - st0 i st0 zdejmujemy ze stosu // n--;
    
    ftst        ; sprawdzamy czy st0 (n--) jest równe 0
    fstsw ax    ; zapisujemy stan FPU do AX
    sahf        ; wrzucamy rejestr AH do rejestru flag
    fstp dword [n]      ; zapisujemy st0 pod adresem [n] i zrzucamy st0 ze stosu
    jne petla   ; jezeli rozne to petla
    
    fxch st0, st1 ; wymieniamy st0 z st1 // temp = wynik, wynik = temp
    
        koniec:
    fld1           ; ładujemy wartośc 1.0f do st0
    faddp st1, st0 ; wynik += 1.0f == wynik += x^0/0! lub gdy x == 0.0f to e^0 == 1.0f
                   ; poprzednia linijka dodatkowo zdejmuje wartość st0 ze stosu
    leave          ; usuwa ramke stosu
    ret            ; wartosc zwracana to wartosc z rejestru st0
    n:      dd  0.0
    podstawa: dd 1.0
    

I named file p4.asm - c program:

#include <stdio.h>


extern float liczbae(int n);

int main()
{
    int n = 6;

        float wynik;
    int wait = 0;
    printf("Program liczy wartosc e z podana dokladnoscia");
        printf("\n\nPodaj dokladnosc: ");
    scanf("%d", &n);
        wynik = liczbae(n);
        printf("\ne = %f", wynik);
                scanf("%d", &wait);
    return 0;
}

I named file p2.c

now in nasm i can compile it with Borland with following lines:

cd C:\Users\jaa\Desktop\assembler projekt 2    
nasm p4.asm -f obj -o obj.obj
set path=C:\Borland\BCC55\Bin;%path%
bcc32 p2.c obj.obj
p2

but, when i compile using gcc, with following lines:

cd C:\Users\jaa\Desktop\assembler projekt 2
nasm -f coff p4.asm -o plik.o
set path=%pah%;C:\mingw\bin
gcc  p2.c -c -o plik1.o
gcc plik.o plik1.o -o plik.exe

plik.exe runs, but it crashes when i type 11 and enter but that error doesn't occur in nasm. I wonder why?


Viewing all articles
Browse latest Browse all 21994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>