Процедура и стек - Assembler

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

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

есть код
;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
ну кроме кода есть еще и уравнение , но его я могу уже сделать сам, уже начал шарить в asm, проблема в том что если я достаю из стека какое то значение через процедуру, мне программа выбивает ошибку спасибо заранее тому кто поможет,

Решение задачи: «Процедура и стек»

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, который выполняет следующие действия:

  1. Объявление переменных и их значений:
    • 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
  2. Выполнение действий:
    • Ввод значений A, B, C с помощью функции scanf
    • Выполнение функции calc, которая складывает значения A и B, затем умножает результат на значение C
    • Вывод значения eax с помощью функции printf
    • Ввод данных с помощью функции _getch
    • Выполнение функции exit для завершения программы
  3. Детали функции calc:
    • Передача значений A, B, C в функцию calc
    • Присваивание значения A регистру eax
    • Сложение значения A с значением B
    • Умножение результата на значение C
    • Возврат значения eax
  4. Значения переменных A, B, C не указаны в коде.

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


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

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

9   голосов , оценка 4.111 из 5
Похожие ответы