Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка ASM кода в MinGW 
V
    Опции темы
andrew_121
Дата 13.6.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



zim22, И часто ты видел чтоб WIN32 приложения использовали прерывания? smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 13.6.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(zim22 @  13.6.2009,  16:48 Найти цитируемый пост)
1:
mov ah, 9                       ; Номер функции DOS - в AH
mov dx, offset message ; Адрес строки - в DX
int 21h                           ; Вызов системной функции
ret
message db "Hello World!", 0Dh, 0Ah, '$'

Ну это дос. Это
Цитата

# Программные — инициируются выполняемой программой явным исполнением специальных инструкций, то есть синхронно, а не асинхронно. Программные прерывания могут служить для вызова сервисов операционной системы.

В виндоуз это API функции а не прерывания. А аппаратные - запрещены в режиме пользователя.
PM   Вверх
zim22
Дата 13.6.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(andrew_121 @  13.6.2009,  16:49 Найти цитируемый пост)
И часто ты видел чтоб WIN32 приложения использовали прерывания?

в силу специфики работы ни разу не видел. видел разве что ассемблерные вставки в критических к быстродейтсвию местах.


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


любитель
****


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

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



Цитата(zim22 @  13.6.2009,  15:48 Найти цитируемый пост)
вы со мной не согласны, что прерывания можно интерпретировать как вызов функций?

Цитата(zim22 @  13.6.2009,  15:31 Найти цитируемый пост)
прерывание это всего-навсего вызов функции, параметры которой заранее ложатся в регистры.

функция о которой Вы говорите, не прерывание, а обработчик прерывания. smile



--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 13.6.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(mes @  13.6.2009,  16:53 Найти цитируемый пост)
функция о которой Вы говорите, не прерывание, а обработчик прерывания.

Подробней плиз...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 13.6.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(zim22 @  13.6.2009,  16:31 Найти цитируемый пост)
прерывание это всего-навсего вызов функции, параметры которой заранее ложатся в регистры.

по поводу этого, может вы спутали с __fastcall? Этот calling convention применяется как рекомендация к передаче первых двух параметров функции через регистры ECX и EDX.

Цитата(andrew_121 @  13.6.2009,  17:13 Найти цитируемый пост)
Подробней плиз... 

В ДОС существует таблица векторов прерываний, на самом деле это просто область памяти в которой записан обработчик каждого прерывания ДОС. ДОС совершенно незащищенная ОС и потому она позволяет изменять таблицу. В ней можно переназначить вектор на свой обработчик. Так в ДОС перехватывают нажатие клавишы к примеру. Разумеется испортить таблицу - плевое дело. Один неверный шаг и вся ОС умрет. Вот такие дела. Кстати win98 далеко не ушел от ДОС, т.е. это была всего лишь графическая оболочка над ДОС.

Это сообщение отредактировал(а) azesmcar - 13.6.2009, 17:24
PM   Вверх
zim22
Дата 13.6.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(azesmcar @  13.6.2009,  17:19 Найти цитируемый пост)
по поводу этого, может вы спутали с __fastcall? 

я не силён в ассемблере, поэтому признаЮ свою неправоту, если она была. 
просто помню ещё с института преподаватель твердил: прерывание - это функция, в которую передаются параметры из регистров. smile

Это сообщение отредактировал(а) zim22 - 13.6.2009, 17:37


--------------------
PM MAIL   Вверх
azesmcar
Дата 13.6.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(zim22 @  13.6.2009,  17:37 Найти цитируемый пост)
просто помню ещё с института преподаватель твердил: прерывание - это функция, в которую передаются параметры из регистров

Он ошибался smile Тоже самое если сказать
Событие это функция. Функция может быть вызвана в результате события, но событие это не функция. Приравнивать их не стоит.

Вот тут неплохо описано
http://dklab.ru/doc/int.html#cont0

А может он просто пытался обяснить максимально ясно, типа
Цитата(Цитата из книги по C++)

Переменная - это такой "ящичек" с именем,
в котором может храниться некое ЗНАЧЕНИЕ.

вот только по моему опыту, хорошему такие книги не учат.
PM   Вверх
andrew_121
Дата 13.6.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(azesmcar @  13.6.2009,  17:19 Найти цитируемый пост)
Кстати win98 далеко не ушел от ДОС, т.е. это была всего лишь графическая оболочка над ДОС.

А win95, milenium ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 13.6.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(andrew_121 @  13.6.2009,  17:53 Найти цитируемый пост)
А win95, milenium ? 

ну про 95-ый я даже забыл smile с ленолиум-ом сильно не знаком, но вроде одна хрень, что он, что 98-ой.
в NT и его потомках (2000, XP, Vista) это дело исправили.
PM   Вверх
jhonyxakep
Дата 14.6.2009, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Цитата

Какие прерывания в винде?!!! Это же не DOS!


без вызова 21 прерывания, код не работает

_asm{} вообе не работает :(

раз-уж так пошло: может кто-нибудь подсказать другой способ выводить один писель на экран в MinGW? Из этого и получилась заворуха :(
PM MAIL ICQ   Вверх
azesmcar
Дата 14.6.2009, 10:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(jhonyxakep @  14.6.2009,  07:00 Найти цитируемый пост)
без вызова 21 прерывания, код не работает

прерывания использовать можно, если программа пишется для ДОС, т.е. работает под эмуляцией.
вообще это вопрос по ассемблеру, для вывода пикселей надо сперва установить графический режим монитора.
Есть же турбо ассемблер который запускается под виндоуз. Вообще стоило бы почитать
http://forum.vingrad.ru/index.php?showtopic=34

Это сообщение отредактировал(а) azesmcar - 14.6.2009, 10:51
PM   Вверх
xvr
Дата 15.6.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(jhonyxakep @ 14.6.2009,  07:00)
Цитата

Какие прерывания в винде?!!! Это же не DOS!


без вызова 21 прерывания, код не работает

_asm{} вообе не работает :(

Ага, а с вызовом 21го прерывания программа будет работать, но недолго - до появления таблички 'Программа выполнила некоректную операцию и будет закрыта' (или как то так).
Цитата

раз-уж так пошло: может кто-нибудь подсказать другой способ выводить один писель на экран в MinGW? 
Если это 'способ выводить пиксель на экран' - то я Папа Римский.
Про графику в консоли можете смело забыть - ну не поддерживает Винда графику в консоли для Win32 приложений, а MingW не умеет делать ДОС приложения  smile 
PM MAIL   Вверх
andrew_121
Дата 15.6.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(xvr @  15.6.2009,  18:07 Найти цитируемый пост)
ну не поддерживает Винда графику в консоли для Win32 приложений, а MingW не умеет делать ДОС приложения

Долго я пытался это объяснить smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zedx
Дата 15.8.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите, а как ЦЕЛИКОМ функцию на ассемблере вставить?
В делфях это было так:
Код

procedure someproc; assembler;
asm
// код
end;


в Си делаю:
Код

void someproc()
{
  asm
      {
       // код
       }
}


Из-за того, что компилятор считает процедуру сишной, при входе в неё он самостоятельно сохраняет регистры в стек, а это нарушает работоспособность основного кода. Как его заставить делать только то, что указано в коде, т.е. как объявить чисто ассемблеровскую процедуру? 
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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