Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Связь Ассемблера и СИ [компилятор QC]


Автор: buian 1.11.2007, 17:24
Добрый день. Проблема такая, необходимо написать головную программу на СИ, ассемблерную функцию, и из программы на СИ вызвать ассемблерную функцию. Все это реализовать в компиляторе Quick C. 
Выглядить это должно примерно так:

программа gl.c:
Код

#include <stdio.h>
#include "CALL.asm"
extern int func(int p1, int p2, int n);
main()
{
func(5,5,5);
}


файл CALL.asm
Код

.model small,c
.code
_func PROC NEAR USES SI DI, p1: WORD, p2: WORD, n: WORD
    mov AX,9h
;собственно здесь сама функция идет
RET

_func ENDP

end


при компиляции головной программы выдает:
error C2059: syntax error : '.'

указывая на самую первую строку: 
.model small,c

в че проблема? модель памяти в настройках компиляции small.

Надеюсь на вашу помощь.

Автор: JackYF 1.11.2007, 17:32
Цитата(buian @  1.11.2007,  17:24 Найти цитируемый пост)
#include "CALL.asm"

нет, не так.

Ты должен отдельно скомпилировать ассемблерный файл, получить на выходе объектный файл.

Дальше в программе на Си объявить заголовок этой функции, и вызывать по мере необходимости.
А компоновщику указать, нужно добавить в конечный бинарник еще и скомпилированный ранее объектный файл.

Или, если этот компилятор позволяет, использовать ассемблерные вставки.

Автор: MAKCim 1.11.2007, 22:24
к тому, что сказал JackYF добавлю, что в CALL.asm функция имеет идентификатор _func, а в С-файле - func 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)