Не могу найти ошибку в коде написанном на FASM - Assembler

Узнай цену своей работы

Формулировка задачи:

Задача состоит в том чтобы в консоли ввести число , нажать ентер и на выводе получить значение синуса этого числа в рад(по моему). Основной код (решение задачи работает правильно. Проблема с вводом, число которое вводишь с клавиатуры уходит неизвестно куда, и ответ выводит только нули. Помогите пожалуйста. P.S. Код компиллируется.
И пожалуйста не давайте мне ссылки на мануалы, мне нужна помощь в конкретной ситуации чтобы разобраться в том куда делось число и как и откуда его воткнуть в X чтобы выходил нормальный ответ.

Решение задачи: «Не могу найти ошибку в коде написанном на FASM»

textual
Листинг программы
start:
    invoke AllocConsole
    invoke GetStdHandle, STD_INPUT_HANDLE
    mov [in_handle], eax
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov [out_handle], eax
    invoke WriteConsole, [out_handle], text, 18, 0
    cinvoke scanf, scffmt, X_inp
    finit
    fld [X_inp]
    fsin
    fstp [X]
    cinvoke printf, ffmt, dword[X], dword[X+4]
    invoke  ExitProcess,0

section '.data' data readable writeable
    ffmt      db  'AAAA sin = %lf',0
    CRLF      db  '',13,10,0
    strfmt    db  '%s',0
    msg       db  'PUSH ENTER',0
    text      db  'Enter an number - ' ,0
    scffmt    db  '%f',0
    in_handle dd ?
    out_handle dd ?
    X dq 0, 0, 0
    X_inp dd 0
    buf1 db 128 dup (?)

Объяснение кода листинга программы

Список действий, которые происходят в коде:

  1. Код начинает выполнение с метки start.
  2. Код подключает консоль с помощью функции AllocConsole.
  3. Код получает дескриптор стандартного ввода с помощью функции GetStdHandle и сохраняет его в переменной [in_handle].
  4. Код получает дескриптор стандартного вывода с помощью функции GetStdHandle и сохраняет его в переменной [out_handle].
  5. Код выводит строку Enter an number - с помощью функции WriteConsole, используя дескриптор [out_handle].
  6. Код использует функцию scanf для чтения числа с плавающей точкой и сохраняет его в переменной [X_inp].
  7. Код вычисляет синус числа, используя функцию fsin, и сохраняет результат в переменной [X].
  8. Код выводит значения переменных [X] и [X+4] с помощью функции printf, используя форматную строку [ffmt].
  9. Код вызывает функцию ExitProcess для завершения работы программы.
  10. В секции .data определены следующие переменные:
    • [ffmt] содержит форматную строку для функции printf.
    • [CRLF] содержит символы новой строки.
    • [strfmt] содержит форматную строку для функции printf.
    • [msg] содержит сообщение PUSH ENTER.
    • [text] содержит строку Enter an number -.
    • [scffmt] содержит форматную строку для функции scanf.
    • [in_handle] и [out_handle] содержат дескрипторы стандартного ввода и вывода соответственно.
    • [X] и [X_inp] содержат числа с плавающей точкой.
    • [buf1] содержит буфер для чтения числа с плавающей точкой.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5