Не могу найти ошибку в коде написанном на 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]содержит буфер для чтения числа с плавающей точкой.