https://pastein.ru/t/sC

  скопируйте уникальную ссылку для отправки


; (a – d)/b + d при a=12; b=17; d=2110
    .486
    .model flat, stdcall
    option casemap :none   ; case sensitive

    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\macros\macros.asm
    include \masm32\include\Fpu.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\Fpu.lib
    
    .data
a db "12",0    ; текстовая запись чисел
b db "17",0
d db "2110",0

a_real dt 0   ; не обязательно - храним преобразованные в вещественные
b_real dt 0   ; можно было обойтись, но так проще и нагляднее
d_real dt 0

result db 32 dup(0)    ; место для результата
res_title  db "Result",0  ; заголовок окна

    .code
start:
    invoke FpuAtoFL, ADDR a, ADDR a_real, DEST_MEM      ; преобразовываем строку в вещественное
    invoke FpuAtoFL, ADDR b, ADDR b_real, DEST_MEM
    invoke FpuAtoFL, ADDR d, ADDR d_real, DEST_MEM
    
; вычитаем из преобразованного преобразованные и запоминаем в числовом процессоре
; см. Help -> FPU Lib Help -> Available Functions
; источник1 = вещественное, источник2 = вещественное, результат в сопроцессоре
; 3 параметр поэтому игнорируется
    invoke FpuSub, ADDR a_real, ADDR d_real, 0, SRC1_REAL or SRC2_REAL or DEST_FPU
; Эти аналогчно, но результат предыдущего в сопроцессоре    
    invoke FpuDiv, 0, ADDR b_real, 0, SRC1_FPU or SRC2_REAL or DEST_FPU
    invoke FpuAdd, 0, ADDR d_real, 0, SRC1_FPU or SRC2_REAL or DEST_FPU
; Преобразование результата в сопроцессоре в строку
; первый параметр игнорируется (в сопроцессоре источник), 
; второй - сколько чисел после десятичной точки
; третий - куда сохранить
    invoke FpuFLtoA, 0, 2, ADDR result, SRC1_FPU or SRC2_DIMM

; это тривально, можно было и с print сделать, но тогда нужно будет организовывать задержку
    invoke MessageBox, 0, ADDR result, ADDR res_title, MB_OK
    exit
end start