Гибридная программа Си-Ассемблер
Автор: DDDR • Октябрь 1, 2021 • Лабораторная работа • 815 Слов (4 Страниц) • 465 Просмотры
Министерство образования Российской Федерации
Пензенский государственный университет
Кафедра «Вычислительная техника»
ОТЧЕТ
по лабораторной работе №7
по курсу «Программирование»
на тему «Гибридная программа Си-Ассемблер»
Выполнил:
Приняла:
Пенза 2020
Цель работы: изучение типов вызова функций языка Си и получение навыков разработки ассемблерных программ, вызывающих стандартные функций Си
Лабораторное задание. Разработать программу вычисления функции: y=a+b-c*d/e
Описание метода решения задачи:
- Создал фунцию для вызова scanf в ассемблерной вставке
- Написал код для вычисления функции
- Вывел результат через printf d ассемблерном коде
Листинг:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
using namespace std;
int s;
char str1[] = "%d";
char str2[] = "функция: y=a+b-c*d/e результат = %d";
_declspec(naked)
int input()
{
__asm {
lea esi, s;
push esi;
lea eax, str1
push eax;
call scanf;
pop ebx
pop ebx
lea eax, s
ret
}
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int a, b, c, d, e, y;
char str1[] = "%d";
char str2[] = "функция: y=a+b-c*d/e результат = %d";
__asm {
call input
mov eax, [s]
mov a, eax
call input
mov eax, [s]
mov b, eax
call input
mov eax, [s]
mov c, eax
call input
mov eax, [s]
mov d, eax
call input
mov eax, [s]
mov e, eax
...