// Работа N LAB5 // Шаблон программы // Тема - ПОДПРПОГРАММЫ #include #include #include /* При вызове функции в Си, она интерпретируется как команда 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 = "<