![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
rujmaster |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Есть функция, написанная на Ассемблере, требуется добавить ее в проект, написанный на языке С. Среда разработки MV C++ 6.0
Функция на ассемблере:
код на С:
В-общем, как не пытался, компоновать не хочет. Куда нужно добавлять фаил obj? Это сообщение отредактировал(а) rujmaster - 13.12.2009, 23:03 |
||||
|
|||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 8 Всего: 146 |
||||
|
||||
rujmaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Хорошо, допустим не MV6. Какую среду разработки выбрать? На ассемблере нужен именно tasm.
Cтавил Borland C++ 5.5, так он вообще ничего скомпилировать не может. Не находит библиотек. А если изменить код asm на 32 разр? |
|||
|
||||
smoke_man |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: нет Всего: 17 |
Посмотри пример тут, а если tasm нужен, то для 32 разр используй tasm32.
-------------------- 0x2b|~0x2b |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
rujmaster, если эта ассемблерная функция делает только то, что написал ты, то проще написать на си: b + (a << 1)
|
|||
|
||||
rujmaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Ну в-общем то эта функция была взята в качестве примера. Реально же мне нужно создать функции для работы со строками, и я не могу отступать от требований лабораторной работы
![]() |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
rujmaster,
Слова про лабораторную работу, должен был сказать в первом посту! А тут множество людей, сразу не понимают, что человеку надо так и начинают давать кучу не нужных советов! ;) А по делу! Напиши тоже самое на fasm , синтаксис простой! Закомпиль в ввиде coff , ф-ции по cdecl декларации! Создай прототип на сях и обжуху закинь в проект в MS Visual Studio как обычный проект. Не было требования по выбору ассемблера, потому предлагаю именно ФАСМ !!! Потому что разивается, а в мире ПО это чуть ли не важное свойство! Синтаксис тасмо-подобный! Имеет туеву хучу форматов и есть реализации под разными платформами! Это если ты будешь преподу говорить, надумав взять фасм ;) ЗЫ: Попробую с утра набросать, если работа не засосет ) |
|||
|
||||
rujmaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Всем спасибо за советы, надеюсь дело сдвинется с мёртвой точки
![]() |
|||
|
||||
rujmaster |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Скачал borland C 3.1 , решил все таки использовать 16разр. В качестве примера взял следующую функцию:
Модуль на С:
Вроде компонуется и даже что-то считает ![]() К примеру, если на вход записать a=1, b=1, то результат выводится = 748. В чем ошибка? Думаю, тему уже нужно в другой раздел ![]() Это сообщение отредактировал(а) rujmaster - 14.12.2009, 21:45 |
||||
|
|||||
smoke_man |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: нет Всего: 17 |
Посмотри тут.
Попробуй int a,b,z - поменять на short int Добавлено через 1 минуту и 27 секунд И тоже самое с прототипом функции funcl - int поменять на short int. -------------------- 0x2b|~0x2b |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
rujmaster, у Borland C++ есть возможность компиляции в ассемблерный текст. Напиши на С++ функцию, которая принимает то же количество аргументов, затем сделай ассемблерный текст и посмотри, как "достаются" переменные из стека.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Во первых - mov bp,sp надо ставить СРАЗУ ПОСЛЕ push bp
Во вторых - константы в mov ?x,[bp+4] будут зависеть от модели памяти. Советую написать функцию на С, потом откомпилировать ее в ассемблер и посмотреть на константы и на пролог/эпилог функции. |
|||
|
||||
rujmaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо, вопросов больше нет
![]() |
|||
|
||||
rujmaster |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
А вообще-то есть )). Вот функция подсчета длины строки на asm:
Не понятна строчка :
почему bx в скобках?, и почему здесь необходимо делать преобразование? |
||||
|
|||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
В скобках потому что это косвенная адресация - из памяти читается байт по адресу содержащемуся в bx и ставнивается с 0
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |