реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Вопрос про прерывания в паскале, Как кроме моего оставить и штатное?
zltigo
сообщение Aug 27 2008, 08:49
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Demeny @ Aug 27 2008, 10:38) *
Сохранить флаги и регистры и восстановить их - это задача старого обработчика, если он корректно написан (иначе как же он работал до этого).

Понятно sad.gif переписали прием откуда-то не думая... Обработчик прерывания возвращается по iret а не по ret и соответственно из стека извлекается еще и слово флагов. Посему оно должно быть туда помещено. В Вашем коде оно помещается передачей "функции" при вызове наследуемого параметра. Естественно функция-обработчик знать о нем не знает, но зато он попадает в стек...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Demeny
сообщение Aug 27 2008, 09:25
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(zltigo @ Aug 27 2008, 12:49) *
Понятно sad.gif переписали прием откуда-то не думая...

Ну дык ... если сороконожка будет думать, как ходит её каждая нога - она вообще с места не сдвинется. smile.gif
А ресурс по Паскалю, откуда я это списал, и вправду неплохой http://pascal.sources.ru. Но то, что у меня это работает - истинная правда.


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 27 2008, 10:15
Сообщение #18


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(zltigo @ Aug 27 2008, 14:36) *
Надо отличать минимально необходимые настройки от лишних сущностей.


Настройки есть, как данность. Так что сущностей не добавляется.
[off]Меня удивляет вот что. Человек задал вопрос, на который вы не дали ответа, ибо у вас "нет желания вспоминать". Я дал готовый, проверенный вариант, и тут у вас неожиданно появилось это желание. Выходит, желание раскритиковать сильнее желания помочь? smile.gif
[/off]

Цитата(zltigo @ Aug 27 2008, 14:36) *
В приведенном случае вызываемя функция вызывается с параметром smile.gif и декларирована, как обработчик прерывания.

Это где? Вот это чтоль:
Код
type      
          TInterrupt = procedure (Flags: Word);
var
          OldIntHandler : TInterrupt;

? Какой же это обработчик?

Цитата(zltigo @ Aug 27 2008, 14:36) *
Слишком категорично smile.gif. Работает какая-то программа, имеет свой стек, на который и рассчитывает и вдруг ее кто-то прерывает и начинает пользовать ее стек sad.gif.


Естественно стек делается с рассчётом на обработчик прерывания. Это гораздо проще, чем заводить отдельный стек на обработчик. "Зачем плодить лишние сущности"? smile.gif
А моё возражение было насчёт того, что в DPMI надо делать что-то особенное со стеком, а то без этого не работает.



Цитата(Demeny @ Aug 27 2008, 14:38) *
Не возникает, если Вы не используете локальные переменные в своём обработчике.


Конечно же использую, и ничего не валится. Дело наверное в чём-то другом. Может банально не хватает стека.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 27 2008, 16:29
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AHTOXA @ Aug 27 2008, 12:15) *
Человек задал вопрос, на который вы не дали ответа, ибо у вас "нет желания вспоминать".

Если быть точным и прочитать написанное мной полностью, то нет желания вспоминать диалект Паскаля не имеющий актуальности с 90x годов. Помочь не оказывался, в том числе и конкретными кодом smile.gif. И обсуждать начал отнюдь не Паскаль, а подход к делу. Не нервничайте.
Цитата
? Какой же это обработчик?

Опять через слово читаете sad.gif это декларация обработчика.
Цитата
Естественно стек делается с рассчётом на обработчик прерывания.

Да нуsmile.gif А DOS, насамом деле вполне себе многозадачная система - драйвера, TSR-ы, само ядро...
C чего Вы взяли, что прерывать будут исключительно Вашу программу c "рассчитанным" стеком?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 27 2008, 17:38
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(zltigo @ Aug 27 2008, 22:29) *
Помочь не оказывался, в том числе и конкретными кодом smile.gif.

Однако же не помогли sad.gif.
Цитата
И обсуждать начал отнюдь не Паскаль, а подход к делу. Не нервничайте.

Да я не нервничаю. Просто удивляюсь...
Цитата
Опять через слово читаете sad.gif это декларация обработчика.

Это вы через слово цитируете. Вы написали, что
Цитата
В приведенном случае вызываемя функция вызывается с параметром и декларирована, как обработчик прерывания.
(выделение моё). Вот я и поинтересовался, где она декларирована как обработчик прерывания.
Цитата
C чего Вы взяли, что прерывать будут исключительно Вашу программу c "рассчитанным" стеком?

Да, тут я был не прав. Посмотрел, почему же тогда у меня всё работало, оказывается я в прерывании работал только с глобальными переменными. Но продолжаю настаивать, что это не зависит от DPMI smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 27 2008, 19:07
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AHTOXA @ Aug 27 2008, 19:38) *
Однако же не помогли sad.gif.

Однако предлагал C/C++/ASM но никого не заинтересовал smile.gif
Цитата
(выделение моё). Вот я и поинтересовался, где она декларирована как обработчик прерывания.

Декларирована и используется как обработчик прерывания c фокусом ввиде запихивания в стек параметра. В борлянячем "С" можно и "естественее" c квалификатором interrupt.
Код
void interrupt (*old_xxx_vect)(...);

void interrupt xxx_handler(...)
{
......
    (*old_xxx_vect)();
.....
}

Цитата
Но продолжаю настаивать, что это не зависит от DPMI

Продолжайте настаивать, только зачем обращаясь ко мне smile.gif?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 27 2008, 19:18
Сообщение #22


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(zltigo @ Aug 28 2008, 01:07) *
Декларирована и используется как обработчик прерывания c фокусом ввиде запихивания в стек параметра.

Вот именно что декларирована она как обычная процедура с параметром типа word. А используется как обработчик прерывания. Кстати, какие гарантии, что параметр будет передан на стеке?
Цитата
Продолжайте настаивать, только зачем обращаясь ко мне smile.gif?
Да тут больше нет никого, а понастаивать охотаsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 27 2008, 19:25
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AHTOXA @ Aug 27 2008, 21:18) *
Кстати, какие гарантии, что параметр будет передан на стеке?

Для Борланда 100% - он только классическую передачу параметров поддерживает. Передача через стек это уже навороты более свежих сишных компиляторов типа Watcom, кроме того (или прежде всего?) даже навороченные компиляторы не имеют права воспользоваться передачей не через стек для "чужих" функций.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 28 2008, 05:30
Сообщение #24


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(zltigo @ Aug 28 2008, 01:25) *
Для Борланда 100% - он только классическую передачу параметров поддерживает.


Вообще-то, начиная с какой-то версии, борландовский паскаль в качестве основного соглашения о вызовах использует "register". Но это не для доса уже конечноsmile.gif

Ну что ж, получается, что всё там будет работать. Но я бы всё ж для наглядности применил pushf+call smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th August 2025 - 00:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.0162 секунд с 7
ELECTRONIX ©2004-2016