Author Topic: Very simple adding using the fpu!  (Read 76 times)


  • Member
  • ***
  • Posts: 279
  • I love assembly language programming.
Very simple adding using the fpu!
« on: September 22, 2017, 12:59:52 PM »
My first program using the fpu with the help of the fpu.lib and the great tutorial of Raymond!

Code: [Select]

.model      flat,stdcall
option      casemap:none

include     \masm32\include\
include     \masm32\include\
include     \masm32\include\                                 ; The latest version.

includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\fpu.lib                                     ; The latest version.

align 1
ascresul    byte        256 dup(' ')                                ; A big buffer for the ascci string (the real number,  the result).
inbuf       byte        256 dup(' ')                                ; A big buffer for the ReadConsole function.

align 4

stdin       dword       ?
stdout      dword       ?
result      dword       ?                                           ; The result of the sum.
chrswrit    dword       ?
chrsread    dword       ?

align 4   
            call        AllocConsole
            push        STD_INPUT_HANDLE
            call        GetStdHandle

            mov         stdin,eax

            push        STD_OUTPUT_HANDLE
            call        GetStdHandle

            mov         stdout,eax

            push        SRC1_CONST or SRC2_CONST or DEST_MEM4       ; We want to sum pi + pi.                               
            push        offset result                               ; Store the result here.
            push        FPU_PI                                      ; Pi.
            push        FPU_PI                                      ; Pi.
            call        FpuAdd                                      ; Adds two numbers and returns the result as a real number.                                 

            cmp         eax,0
            je          error                                       ; On error condition we just exit the program.

            push        SRC1_REAL4 or SRC2_DIMM or STR_REG          ; Return the value in decimal format.
            push        offset ascresul                             ; We store the string here.
            push        00000106h                                   ; 1 character before the decimal point and 6 decimal digits.
            push        offset result                               ; The real number (the result of the later sum).
            call        FpuFLtoA                                    ; Converts a real number in an ascciz string.

            push        NULL
            push        offset chrswrit
            push        9                                           ; 1 char + the point + 6 digits + 0dh (CR).
            push        offset ascresul
            push        stdout
            call        WriteConsole

            push        NULL
            push        offset chrsread
            push        1                                           ; Just to the enter key (CR).
            push        offset inbuf
            push        stdin
            call        ReadConsole
align 4
            call        FreeConsole
            push        0
            call        ExitProcess

            end         start

Attached the source (same as above) and the .exe