58 lines
2.6 KiB
C++
Executable File
58 lines
2.6 KiB
C++
Executable File
// Работа 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яды пе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яды пе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 Реализуйте передачу параметров через регистры или общую память
|
||
}
|