Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов прерывания в Windows 
V
    Опции темы
Kuvaldis
Дата 23.6.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



Программирую на С / С++. Нужда заставила обратиться к ASM.
Не получается вызвать прерывание под Windows XP в ассемблерной вставке. Если запустить программу под borland C 3.1, то все работает. Под Builder 6 просто черный экран. А в Visual c++ мелкософтовском выдается ошибка времени выполнения. Ну Borland C - он под DOS работает, тут все понятно. В как сделать, чтобы все работало и в Windows? Заранее спасибо за ответ.

Код

int main()
{
     asm {
               push  ax
               mov   ah, 1
               mov   al, 'A'
               int     21h
              pop   ax
     }

      return 0;
}
 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Damarus
Дата 23.6.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Писать программу для DOS (COM, MZ). Borland C 3.1 это и делает. Windows XP эмулируем DOS'овские прерывания для DOS'овских программ. В программе для Windows (PE - Builder 6, Visual С++) - никак. В Windows XP доступ к прерываниям есть только из режима ядра. 
PM MAIL ICQ Jabber   Вверх
Chingachguk
Дата 24.6.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Нужда заставила обратиться к ASM.


Что именно ты хочешь сделать на ASM в windows?

В вышеприведенном примере ты вызываешь функцию DOS - "READ CHARACTER FROM STANDARD INPUT, WITH ECHO", наверное это просто "пробный пример"? 


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Kuvaldis
Дата 24.6.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



Chingachguk
Для своего курсового на С++ у нас в БГУИР (минск) 2 среды: Borland C++ 3.1 и Visual C++ 6/
Второй вариант посимпатичнее, но в этой IDE нет функций а-ля gotoxy wherex для управления курсором, что является критичным для реализации (менюшки всякие)
Хотел просто эти функции через 10h прерывание реализовать. Не судьба... 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
setty
Дата 24.6.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



менюшки под дос я когдато писал на тасме правда (даже не псевдо а самая что не наесть графика) если надо могу выложить исходник 
PM MAIL   Вверх
Chingachguk
Дата 24.6.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Второй вариант посимпатичнее, но в этой IDE нет функций а-ля gotoxy wherex для управления курсором, что является критичным для реализации (менюшки всякие)


Неужели в консольной WIN32 программе нельзя двигать курсор? Или ты про оконное приложение - там нужно специфичные для win функции использовать, но также все есть. Вот нашел в примерах из пакета MASM32 (есть на сайте WASM.ru):

Код

locate proc x:DWORD,y:DWORD

    LOCAL hOutPut  :DWORD
    LOCAL xyVar    :DWORD

    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov hOutPut, eax

  ; -----------------------------------
  ; make both co-ordinates into a DWORD
  ; -----------------------------------
    mov  ecx, x
    mov  eax, y
    shl  eax, 16
    mov  ax, cx

    invoke SetConsoleCursorPosition,hOutPut,eax

    ret

locate endp


Имхо, и на СИ то же самое можно написать... Это Ж просто WIN API. 


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Kuvaldis
Дата 24.6.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



1. setty!
   Спасибо за предложение и за готовность помочь. Был бы очень рад увидеть твои исходники

2. Chingachguk!!!
Огромнейшее спасибо за ИНФОРМАЦИЮ. (к сожалению пока 100 постов нет для повышения твоей репутации).  

3.  Кстати, решил свою программу откомпилировать в Borland C++ Builder 6. Он же тоже под Win, но функции досовского borland 3.1 gotoxy() и т.д. пристутствуют. Посмотрел в CPU, как они выполняются в этих двух средах.
Оказывается, что в Builder просто (!!!!!!) вызывается WIN API функция SetConsoleCursorPosition().

 


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

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

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


 




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


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

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