Процедура и стек - Assembler
Формулировка задачи:
есть код
ну кроме кода есть еще и уравнение , но его я могу уже сделать сам, уже начал шарить в asm, проблема в том что если я достаю из стека какое то значение через процедуру, мне программа выбивает ошибку
спасибо заранее тому кто поможет,
;lab_5 var 12 format PE console 4.0 include 'win32a.inc' cinvoke printf, var1 cinvoke scanf, decimal, A xor ebx,ebx mov eax,[A] push eax call calc cinvoke printf, res, eax invoke _getch gtfo: invoke exit,0 proc calc pop eax ret endp A dd ? var1 db 'A=',0 decimal db '%d',0 res db 'D=%d',0 data import library msvcrt,'MSVCRT.DLL' import msvcrt,\ printf,'printf',\ scanf,'scanf',\ exit,'exit',\ _getch,'_getch' end data
Решение задачи: «Процедура и стек»
textual
Листинг программы
;lab_1 var 12/ex_2 format PE console 4.0 include 'win32a.inc' cinvoke printf, var1 cinvoke scanf, decimal, A cinvoke printf, var2 cinvoke scanf, decimal, B cinvoke printf, var3 cinvoke scanf, decimal, C stdcall calc, [A], [B], [C] cinvoke printf, res, eax invoke _getch gtfo: invoke exit,0 proc calc arg1, arg2, arg3 mov eax, [arg1] add eax, [arg2] imul [arg3] ret endp A dd ? B dd ? C dd ? var1 db 'A=',0 var2 db 'B=',0 var3 db 'C=',0 decimal db '%d',0 res db 'D=%d',0 data import library msvcrt,'MSVCRT.DLL' import msvcrt,\ printf,'printf',\ scanf,'scanf',\ exit,'exit',\ _getch,'_getch' end data
Объяснение кода листинга программы
Выше представлен код на языке Assembler, который выполняет следующие действия:
- Объявление переменных и их значений:
- A, B, C - значения не указаны
- var1, var2, var3 - содержат строки 'A=', 'B=', 'C=' соответственно
- decimal - содержит строку '%d'
- res - содержит строку 'D='
- A, B, C - используются для передачи значений в функцию calc
- var1, var2, var3 - используются для вывода значений на экран с помощью функции printf
- decimal, res - используются для вывода значений на экран с помощью функции printf
- eax - используется для хранения результата вычисления функции calc
- Выполнение действий:
- Ввод значений A, B, C с помощью функции scanf
- Выполнение функции calc, которая складывает значения A и B, затем умножает результат на значение C
- Вывод значения eax с помощью функции printf
- Ввод данных с помощью функции _getch
- Выполнение функции exit для завершения программы
- Детали функции calc:
- Передача значений A, B, C в функцию calc
- Присваивание значения A регистру eax
- Сложение значения A с значением B
- Умножение результата на значение C
- Возврат значения eax
- Значения переменных A, B, C не указаны в коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д