Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компоновка многомодульной программы, советы, помощь в исправлении ошибок 
:(
    Опции темы
alexsvk
Дата 20.4.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.4.2011

Репутация: нет
Всего: нет



1. Прошу помочь разобраться в корректности связывания файлов.
2. И ещё один вопрос, как программу ассемблера подключить к VS C++ ?
Я хочу принять строку в C++ и отдать её на обработку в assembler, процедура в котором должна возвратить число.

файл lr4.asm

Код

include module.asm
 
extrn findLtrCt:far, outstr:far, fopen:far, fwrite:far,\
fread:far, fcreate:far, fclose:far, scanstr:far, cpysubstr:far,empty_s:far
 
public str_len, strin, strin_len, str_maxlen, CNT_L, RES, STRENDCODE, STRENDCODE2, FENDCODE,\
ENDCODE, OPENMSG, READMSG, WRITEMSG, CREATEMSG,\
CLOSEMSG, FRPATH, FILERHAND, FWPATH, FILEWHAND
 
data segment 'data' ...


файл module.asm

Код

extrn strin:byte, CNT_L:word, FENDCODE:byte, RES:byte, FRPATH:byte, FILERHAND:word,FWPATH:byte,\
FILEWHAND:word, OPENMSG:byte, READMSG:byte, WRITEMSG:byte, CREATEMSG:byte,CLOSEMSG:byte,\
ENDCODE:byte, FENDCODE:byte, STRENDCODE:byte, STRENDCODE2:byte,str_len:word,\
strin_len:word, str_maxlen:abs
 
public findLtrCt, outstr, fopen, fwrite, fcreate, fclose, scanstr, cpysubstr, empty_s
 
DATA segment ...


Объектный код строится без ошибок.
После компоновки в command.com вижу следующее:
C:\DOCUME~1\XPMUser\0016~1\LR_4_M~1 >link module+lr4 lr4

Microsoft ® Segmented-Executable Linker Version 5.01.21
Copyright © Microsoft Corp 1984-1988. All rights reserved.

Run File [MODULE.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
Definitions File [NUL.DEF]:
LR4.OBJ(lr4.ASM) : error L2025: FWRITE : symbol defined more than
pos: F8 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: OUTSTR : symbol defined more than
pos: 102 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FCREATE : symbol defined more tha
pos: 10D Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: SCANSTR : symbol defined more tha
pos: 118 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: EMPTY_S : symbol defined more tha
pos: 123 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FINDLTRCT : symbol defined more t
pos: 130 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: CPYSUBSTR : symbol defined more t
pos: 13D Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FOPEN : symbol defined more than
pos: 146 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FCLOSE : symbol defined more than
pos: 150 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FWRITE : symbol defined more than
pos: F8 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: OUTSTR : symbol defined more than
pos: 102 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FCREATE : symbol defined more tha
pos: 10D Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: SCANSTR : symbol defined more tha
pos: 118 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: EMPTY_S : symbol defined more tha
pos: 123 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FINDLTRCT : symbol defined more t
pos: 130 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: CPYSUBSTR : symbol defined more t
pos: 13D Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FOPEN : symbol defined more than
pos: 146 Record type: 839C
LR4.OBJ(lr4.ASM) : error L2025: FCLOSE : symbol defined more than
pos: 150 Record type: 839C
LINK : warning L4021: no stack segment

LINK : error L2029: Unresolved externals:



FILERHAND in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
FRPATH in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
STRENDCODE in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
FILEWHAND in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
RES in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
FWPATH in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
OPENMSG in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
STRIN_LEN in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
FENDCODE in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
CREATEMSG in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
CNT_L in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
STRIN in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
STRENDCODE2 in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
ENDCODE in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
STR_LEN in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
READMSG in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
STR_MAXLEN in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
CLOSEMSG in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)
WRITEMSG in file(s):
LR4.OBJ(lr4.ASM) LR4.OBJ(lr4.ASM) MODULE.OBJ(module.ASM)

There were 37 errors detected 
PM MAIL   Вверх
500mhz
  Дата 21.4.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



а использование VC и масм (на масме пишете?) это принципиально?

если нет то советую сменить среду на GCC + NASM
соответственно для компиляции и линковки используем

gcc -Wall -c main1.c

nasm -f aout main2.asm

#ld  -o main.elf main1.o main2.o


в коде на С декларируем использование внешней функ  extern void MainFunc();
в коде на АСМ тоже global MainFunc

все, вызываем из С MainFunc() и попадаем на наш код написаный на асме



--------------------

PM MAIL ICQ   Вверх
alexsvk
Дата 21.4.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.4.2011

Репутация: нет
Всего: нет



Но если я использую MSVS 6.0 и хочу передать в процедуру, находящуюся в .asm, строку, а в роли возвращаемого параметра получить число (int). Какие правила оформления необходимо соблюдать, может быть, пример приведёте.
Да, спасибо за ответ на 2-й вопрос, но не подскажите, как избежать появившихся ошибок при компоновке многомодульной программы. Здесь используется только лишь ассемблер, - необходимо соединить два файла. Ошибки приведены выше.

Это сообщение отредактировал(а) alexsvk - 21.4.2011, 11:04
PM MAIL   Вверх
500mhz
Дата 21.4.2011, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



значит так, в С компиляторе необходимо указать что функция передает параметры через стек, соответственно в асме оформить функцию через proc и endp.
возвращаемое значение передаеться в eax если это int  или же в eax передается указатель на массив в случае если функ должна возвратить ну к примеру 10 результатов своей работы

пример для fasm nasm goasm
Код

proc MyFunc,var1,var2,var3
...... some code
......
mov eax,result
ret
endp






к сожалению в масм я не силен, могу помочь с fasm goasm nasm


--------------------

PM MAIL ICQ   Вверх
alexsvk
Дата 21.4.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.4.2011

Репутация: нет
Всего: нет



А пример С - го кода можно показать?
PM MAIL   Вверх
500mhz
Дата 21.4.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



Код


extern void MyFunc();

int _start ()
{
    MyFunc(1,2,3);   вызываем из асм кода и передаем 3 параметра
    return(0);
}




--------------------

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.