Разработайте программу, вычисляющую заданное целочисленное выражение - Assembler/FASM
Формулировка задачи:
ос (windows 7 32 bit)
Заранее спасибо
Решение задачи: «Разработайте программу, вычисляющую заданное целочисленное выражение»
textual
Листинг программы
format PE console 4.0 entry start include 'win32ax.inc' section '.text' code readable executable start: ; получение описателей ввода и вывода консоли invoke GetStdHandle, STD_INPUT_HANDLE mov [hConsoleInput], eax invoke GetStdHandle, STD_OUTPUT_HANDLE mov [hConsoleOutput], eax mov eax, [L] ;(L-A)^2 sub eax, [A] imul eax idiv dword [C] ;(L-A)^2 / C add eax, [K] ;(L-A)^2 / C + K sub eax, [L] ;(L-A)^2 / C + K - L mov ebx, eax mov eax, [C] ; C/2 cdq mov ecx, 2 idiv ecx add eax, ebx ;(L-A)^2 / C + K - L + C/2 mov [Result], eax cinvoke printf, aszFmt, [Result] ;ожидание нажатия ENTER cinvoke printf, aszPressEnter invoke ReadConsole, [hConsoleInput], Buffer,\ 100, BufLen, NULL invoke ExitProcess, 0 section '.data' data readable writeable aszFmt db 'Result=%d', 0Dh, 0Ah, 0 aszPressEnter db 0Dh, 0Ah, 0Dh, 0Ah, "Press ENTER to exit", 0 A dd 1234 L dd -456 C dd 789 K dd -654 section '.bss' readable writeable Buffer db 1024 dup(?) BufLen dd ? hConsoleOutput dd ? hConsoleInput dd ? Result dd ? section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ msvcrt, 'msvcrt.dll' include 'api\kernel32.inc' include 'api\user32.inc' import msvcrt,\ printf, 'printf'
Объяснение кода листинга программы
- Получение описателей ввода и вывода консоли:
Здесь программа получает описатели для стандартного ввода и вывода, используя функции
GetStdHandle
иSTD_INPUT_HANDLE
иSTD_OUTPUT_HANDLE
. Эти функции позволяют программе взаимодействовать с консолью. - Вычисление выражения (L-A)^2 / C + K - L:
Здесь выполняется основная вычислительная работа программы. Сначала вычисляется значение выражения
(L-A)^2
, затем оно делится на значение переменнойC
, и результат сохраняется в переменнойeax
. Затем к этому значению добавляется значение переменнойK
, и результат сохраняется в переменнойeax
. Затем от этого значения отнимается значение переменнойL
, и результат сохраняется в переменнойebx
. - Вывод результата:
Здесь программа выводит результат вычислений на консоль, используя функцию
printf
. Формат вывода задается в строке, которая передается в функциюprintf
в качестве первого аргумента. - Ожидание нажатия ENTER:
Здесь программа ожидает, пока пользователь не нажмет ENTER, используя функцию
ReadConsole
. Данные, введенные пользователем, сохраняются в буфере, который затем выводится на консоль. - Завершение работы программы:
Здесь программа завершает свою работу, вызывая функцию
ExitProcess
с аргументом 0. - Импортирование функций:
Здесь программа импортирует несколько функций из различных библиотек. Функции
printf
иReadConsole
импортируются из библиотекиmsvcrt
, а функцииGetStdHandle
иSTD_INPUT_HANDLE
иSTD_OUTPUT_HANDLE
импортируются из библиотекиkernel32
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д