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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 23:18   #1
LexiusUA
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию Visual Studio 2008. Проблема с асм вставкой в код на С++

Здравствуйте!
Есть проблемка с VS2008.
Делаю вставку на асм, оно компилируется, но при вызове функции вылетает прога с ошибкой "Приложение обратилось к памяти по адресу..."
Есть подозрение, что ВС2008 понимает команду "int 21h" не как interrupt, а как integer.
Моя асм вставка:

Код:
__asm
		{
			mov eax, 003ah
			lea esi, wstr
			mov edx,[esi]
			int 21h 
		}
wstr - char масив размером [256]

Если написать чтото на асм без использования "int 21h" оно работает. Для теста пробывал реализовать операцию сложения внутри асм вставки - работает.

Последний раз редактировалось MaTBeu; 23.03.2009 в 19:31.
LexiusUA вне форума Ответить с цитированием
Старый 23.03.2009, 23:55   #2
Mega
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 41
По умолчанию

Дело не в этом,в стужии масм32 стоит а он не поддерживает прерывания
Mega вне форума Ответить с цитированием
Старый 24.03.2009, 02:00   #3
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Такой код мог бы выполнится(возможно!) только в Win9x. Вызов прерываний недоступен для обычных программ. Этот код для DOS RM скорее чем для win32.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 24.03.2009, 02:18   #4
Mega
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 41
По умолчанию

Если очень надо асм заюзать смори в сторону ReadConsole,WriteConsole
Mega вне форума Ответить с цитированием
Старый 24.03.2009, 21:54   #5
LexiusUA
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Mega Посмотреть сообщение
Если очень надо асм заюзать смори в сторону ReadConsole,WriteConsole
Подскажите плис, что такое ReadConsole и WriteConsole ?
LexiusUA вне форума Ответить с цитированием
Старый 24.03.2009, 22:04   #6
Mega
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 41
По умолчанию

3Ah Что делает?
Mega вне форума Ответить с цитированием
Старый 25.03.2009, 00:56   #7
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Удаляет заданный каталог, в DX надо положить оффсет на путь к этому каталогу. Если не ошибаюсь строка эта должна заканчиваться символом "$".
Что то вы тут шаманством занимаетесь... DOS RM код мешаете с кодом для защищенного режима. Уже бы тогда компилировали что ли хотя бы в BC++.
Вот есть функция - удаляет папку - WinAPI:
Код:
void DeleteFolder(LPCTSTR pszFolder)
{
   SHFILEOPSTRUCT fos = {0};

   fos.wFunc = FO_DELETE;
   fos.pFrom = pszFolder; 

   SHFileOperation(&fos); 
}
Предлагаю автору сказать что он хочет сделать.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 25.03.2009, 01:43   #8
Mega
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 41
По умолчанию

Ну такда можно так
[CODE]
__asm{
push path //put' k papke
call DeleteFolder
}

Что-то я не помню про эту функцию,помню DeleteFile
Ну ладно доверимся Ivan_32
Mega вне форума Ответить с цитированием
Старый 25.03.2009, 02:31   #9
LexiusUA
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Ivan_32 Посмотреть сообщение
Удаляет заданный каталог, в DX надо положить оффсет на путь к этому каталогу. Если не ошибаюсь строка эта должна заканчиваться символом "$".

Предлагаю автору сказать что он хочет сделать.
Мелкософт запретил использование оффсет в ВС2008.
Удаление папки надо реализовать именно на асм, это контрольная работа.
LexiusUA вне форума Ответить с цитированием
Старый 25.03.2009, 02:43   #10
Mega
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 41
По умолчанию

Кто те сказал глупость про оффсет?
делай так
Код:
__asm{
push offset path //put' k papke
call RemoveDirectory
}
Уточнил функцию
Вот теперь рабочий вариант

Последний раз редактировалось Mega; 25.03.2009 в 02:49.
Mega вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Studio 2008 Растаманов Visual C++ 7 26.11.2008 12:59
C++ и Visual Studio 2008 Born to kill Общие вопросы C/C++ 0 12.11.2008 22:22
Visual Studio 2008 bullvinkle Помощь студентам 4 10.11.2008 23:44
Visual C# Studio 2008 werat Общие вопросы .NET 6 17.10.2008 16:38