ВУЗы и колледжи

Составить программу на Ассемблере для вычисления выражения

Вычислить
заданное смешанное арифметическое выражение для данных в форматах BYTE
(переменные a,b) и WORD (остальные переменные). (2*c-d*42)/(c+a-1)
В данном выражении нет переменной b. Скорее всего имелась в виду переменная d.
В выражении есть операция деления, значит, не смотря на то, что входные переменные целого типа, результатом будет действительное число. Ведь в условии ничего не сказано, что деление целочисленное.

format PE console
entry N170739402
include "win32a.inc"

section ".code" code readable executable
N170739402:
    cinvoke printf, Prompt
    cinvoke scanf, fInp, NumBuf
    mov al, byte [NumBuf]
    mov [A], al
    add byte [Prompt + 8], 2
    cinvoke printf, Prompt
    cinvoke scanf, fInp, NumBuf
    mov ax, word [NumBuf]
    mov [C], ax
    inc byte [Prompt + 8]
    cinvoke printf, Prompt
    cinvoke scanf, fInp, NumBuf
    mov al, byte [NumBuf]
    mov [D], al
    finit
    movsx eax, [C]
    mov dword [NumRes], eax
    sal eax, 1
    mov [NumBuf], eax
    fild [NumBuf]
    movsx eax, [D]
    mov [NumBuf], eax
    fild [NumBuf]
    mov [NumBuf], 42
    fild [NumBuf]
    fmulp
    fsubp
    fild dword [NumRes]
    movsx eax, [A]
    mov [NumBuf], eax
    fild dword [NumBuf]
    faddp
    fld1
    fsubp
    fdivp
    fstp [NumRes]
    cinvoke printf, Result, dword [NumRes], dword [NumRes+4]
    cinvoke getch
    cinvoke exit, 0

section ".data" data readable writeable
  Prompt db "Введите A: ", 0
  Result db "Ответ: %f", 13, 10, 10,\
      "Для завершения работы нажмите любую клавишу... ", 0
  fInp db "%d", 0

section ".bss" data readable writeable
A rb 1
C rw 1
D rb 1
NumBuf rd 1
NumRes rq 1

section ".idata" import data readable
library msvcrt, "msvcrt.dll"
import msvcrt, getch, "_getch", printf, "printf",\
    scanf, "scanf", exit, "_exit"



P.S. Проверка корректности ввода не производится.
Валера Кузьменков
Валера Кузьменков
51 590
Лучший ответ
обращайся