Курсовая

Курсовая Взаимосвязь языков C и ассемблера

Работа добавлена на сайт bukvasha.net: 2015-10-25

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 8.11.2024





Раздел 5: Курсовая программа
5.1 Постановка задачи
          В курсовой требовалось написать программу, вычисляющую значение многочлена n-ой степени по вектору размерности n коэффициентов многочлена и по некой переменной х, задаваемые пользователем. Необходимо было реализовать многомодульную связь (два модуля: на С и на ассемблере), а также выразить наглядно связь ассемблера с языком С.
5.2 Блоксхема программы
          Программа реализовывалась по следующей блоксхеме:
  Очевидно, что была реализована связь в обе стороны.
5.3 Модуль на С++
/*Это часть на С++, есть еще на ассемблере*/

#include<iostream.h>
extern "C" void vvod();/*ассемблерная процедура*/

extern "C" void mnogochlen(int *vec);/*функция в С*/

int m;

extern int *vect;/*вектор коэффициентов, объявленный*/

                          /*внешней переменной*/

main()

{

 cout<<"\n Введите степень многочлена:"<<endl;

 cin>>m;

 vvod();/*Вызов ассемблерной процедуры*/

 return 0;

}
extern "C"/*Начало функции на С*/

{

void mnogochlen(int *vect)

{

 int i,g,x;

 int fact,summa;

 summa=0;

 cout<<"\n Введите значение переменной:"<<endl;

 cin>>x;

 for(i=m;i>=0;i--)/*Вычисление ответа*/

 {

  fact=1;

  for(g=0;g<=i;g++)

  {

   fact=fact*x;

  }

  summa=summa+vect[i]*fact;

 }

 cout<<"ответ:"<<summa<<endl;

 cout<<"Ну вот и все!"<<endl;

}

}
5.4 Модуль на ассемблере
MODEL small

dataseg

      so db 'введите вектор коэффициентов','$'

      extrn _m:word, _vec:word; Внешние аргументы

      m2 dw 0

codeseg

     extrn _mnogochlen:proc; функция из С++

     public _vvod; местная процедура

proc _vvod near

       push bp

       mov bp,sp

       push di;Сохранение значений этих регистров

       push si;необходимо, т.к. они используются С++

       MOV             ah,09h   ;начало ввода вектора перестановок

       MOV             dx,offset so

       INT             21h

       mov             si,0

       MOV             cx,[_m]

l1:    MOV             ah,02h

       MOV             dl,'>'

       INT             21h

       MOV             di,0

m1 :   MOV             ah,08h

       INT             21h

       CMP             al,13

       JE              exit

       CMP             al,'9'

       JA              m1

       CMP             al,'0'

       JB              m1

       MOV             ah,02h

       MOV             dl,al

       INT             21h

       SUB             al,'0'

       XOR             ah,ah

       MOV             m2,ax

       MOV             ax,di

       MOV             bx,10

       MUL             bx

       ADD             ax,m2

       MOV             di,ax

       JMP             m1

exit:  MOV             [_vec[si]],di

       ADD             si,2;Данные типа слово, прибавляем 2

       MOV             di,0

       mov             ah,02h

       mov             dl,' '

       int             21h

       mov             dl,13

       int             21h

       mov             dl,10

       int             21h

       LOOP            l1

       mov             sp,bp

       pop             di;извлечение сохраненных регистров

       pop             si;перед возвратом в С++

       MOV             ax,offset [_vec]

       PUSH            ax

       call            _mnogochlen; Вызов функции С++

       ADD             sp,4;Удаление элементов из стека

       POP             bp;адрес возврата

       ret

       endp _vvod

       end
5.5 Анализ проведенной работы
          При работе в многомодульном режиме главные трудности возникают в использовании регистров. Из-за несохранения системных регистров, используемых С++, программа может просто “повиснуть”. Также следовало сделат выбор - какой модуль сделать главным. Но практика показывает, что следует производить вызов языков низкого уровня из высокого, а не наоборот. В общем, все трудности были преодолены и программа появилась в свет.

1. Реферат на тему Современные энергоактивные дома
2. Курсовая Государственный мониторинг земель
3. Реферат на тему Achillies Essay Research Paper AchillesAchilles was one
4. Курсовая Учет персонала и заработной платы на предприятии
5. Реферат История государств средневекового мира
6. Реферат Учёт финансовых результатов в торговле
7. Реферат Подготовка танкера к погрузке
8. Реферат Развитие международной системы охраны прав на произведения науки, литературы и искусства
9. Курсовая на тему Диктиокаулез у телят
10. Задача Виды валютных рисков и их характеристика