Не могу найти ошибку в коде написанном на 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 (?)
Объяснение кода листинга программы
Список действий, которые происходят в коде:
- Код начинает выполнение с метки
start
. - Код подключает консоль с помощью функции
AllocConsole
. - Код получает дескриптор стандартного ввода с помощью функции
GetStdHandle
и сохраняет его в переменной[in_handle]
. - Код получает дескриптор стандартного вывода с помощью функции
GetStdHandle
и сохраняет его в переменной[out_handle]
. - Код выводит строку
Enter an number -
с помощью функцииWriteConsole
, используя дескриптор[out_handle]
. - Код использует функцию
scanf
для чтения числа с плавающей точкой и сохраняет его в переменной[X_inp]
. - Код вычисляет синус числа, используя функцию
fsin
, и сохраняет результат в переменной[X]
. - Код выводит значения переменных
[X]
и[X+4]
с помощью функцииprintf
, используя форматную строку[ffmt]
. - Код вызывает функцию
ExitProcess
для завершения работы программы. - В секции
.data
определены следующие переменные:[ffmt]
содержит форматную строку для функцииprintf
.[CRLF]
содержит символы новой строки.[strfmt]
содержит форматную строку для функцииprintf
.[msg]
содержит сообщениеPUSH ENTER
.[text]
содержит строкуEnter an number -
.[scffmt]
содержит форматную строку для функцииscanf
.[in_handle]
и[out_handle]
содержат дескрипторы стандартного ввода и вывода соответственно.[X]
и[X_inp]
содержат числа с плавающей точкой.[buf1]
содержит буфер для чтения числа с плавающей точкой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д