Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 15:33   #1
molan
 
Регистрация: 22.12.2010
Сообщений: 4
По умолчанию ассемблерные функции на с,линковка

Нашёл вот такую прогу,при линковке выдаёт много ошибок.
Пожалуйста помогите от них избавится.
Задание:программа вычисляет значение многочлена n-ой степени по вектору размерности n коэффициентов многочлена и по некой переменной х, задаваемые пользователем.
Модуль на С.
Код:
#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;
}
}
модуль на ассемблере
Код:
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
Библиотеку iostream добавил сам. Без неё вообще не компилируется.

Последний раз редактировалось molan; 09.05.2011 в 15:36.
molan вне форума Ответить с цитированием
Старый 09.05.2011, 19:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
при линковке выдаёт много ошибок
Каких? Телепаты в отпуске.
p51x вне форума Ответить с цитированием
Старый 09.05.2011, 21:19   #3
molan
 
Регистрация: 22.12.2010
Сообщений: 4
По умолчанию

извините что сразу ошибки не указал.
molan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблерные вставки в c++ chupchupps Помощь студентам 1 09.02.2011 11:54
[c++] [портирование linux->windows] линковка staseg Общие вопросы C/C++ 0 23.11.2009 18:36
qt4, win32 и статическая линковка. ASGAlex Qt и кроссплатформенное программирование С/С++ 3 09.06.2009 09:13
Линковка... GHOST_Kasper Работа с сетью в Delphi 13 21.11.2007 16:06