Files
templates/LABV5.CPP
2024-09-10 22:24:24 +03:00

58 lines
2.6 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Работа N LAB5
// Шаблон программы
// Тема - ПОДПРПОГРАММЫ
#include <stdio.h>
#include<conio.h>
#include<iostream.h>
/*
При вызове функции в Си, она интерпретируется как команда Call
в Assembler. При этом передаваемые в функцию параметры, заносятся в
СТЕК по принципу справа налево. Затем заносится IP следующей команды,
идущей за Call. (внутрисегментный вызов процедуры)
Выход из функции осуществляется с помощью команды RET.
*/
//Функция, выполняющая сложение, параметры перед через стек
void addition(long sl_1,long sl_2, long &sum)
{
/* asm{
mov AX,[BP+4] //AX - младшие pазpяды пеого слагаемого
mov DX,[BP+8] //DX - младшие pазpяды второго слагаемого
mov SI,[BP+12] //SI - сумма младших pазpядов
add AX,DX //сложение младших pазpядов
mov [SI],AX //pезультат косвенно в SI
mov AX,[BP+6] //AX - стаpшие pазpяды пеого слагаемого
mov DX,[BP+10] //DX - младшие pазpяды второго слагаемого
//сложение стаpших pазpядов
mov [SI+2],AX //pезультат в SI
}*/
sum=sl_2;
}
void main ( void )
{
long a,b;
long sum;
cout<<"\n Введите первое слагаемое: ";
cin>>a;
cout<<" Введите второе слагаемое: ";
cin>>b;
addition(a,b,sum);
cout<<"a + b = "<<sum;
getch();
// Задания
// 1 Напишите программу сложения двух 32-х разрядных чисел на Си
// 2 Оформите сложение подпрограммой на Ассемблере (смотри пример)
// 3 Проведите внутрисегментный (ближний) вызов подрограммы
// Проведите межсегментный вызов подпрограммы (процедуры)
// путем изменения модели распределения памяти Tiny - Large
// Что изменилось ?
// 4 Реализуйте передачу параметров через регистры или общую память
}