Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 167
от 06.07.2003, 03:40

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 296
Отправлено ответов: 1039
Активность: 351.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Bill
Статус: Опытный
Общий рейтинг: 184.93
Телефон: (8342) 324312
[Подробней >>]
URiS
Статус: Доверительный
Общий рейтинг: 141.66
[Подробней >>]
Tancho
Статус: Опытный
Общий рейтинг: 151.36
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 118.39
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 122.86
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 293. Здравствуйте, Уважаемые! Подскажите, может кто занимался, в офисных файлах OLE2 на что ссылается Min... (ответов: 1)
Вопрос № 294. Hi All. такая значит беда: var IntS : procedure; procedure Int9; interrupt; begin .... IntS; end; ... (ответов: 5)

Вопросов: 2, ответов: 6


 Вопрос № 293

Здравствуйте, Уважаемые!
Подскажите, может кто занимался, в офисных файлах OLE2 на что ссылается MiniFAT. И где про это можно почитать.
Спасибо.



Вопрос отправлен: 01.07.2003, 01:26
Отправитель: USA-Lesh (usa-lesh@yandex.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bill

Добрый день, USA-Lesh!
Посмотри:
http://www.cyberinfo.ru/cgi-bin/view.cgi?id=467&cat_id=6&print=1
Результат дал поиск на AltaVista
http://www2.informatik.uni-wuerzburg.de/mitarbeiter/eichelberger/SugiBib/docs/index-files/index-13.html
http://www.i3a.org/pdf/wg1n1017.pdf - пожалуй, подробнее всего


Ответ отправлен: 01.07.2003, 10:03
Отправитель: Bill


 Вопрос № 294

Hi All.
такая значит беда:
var IntS : procedure;
procedure Int9; interrupt;
begin
....
IntS;
end;
begin
GetIntVec($9, @IntS);
SetIntVec($9, Addr(Int9));
Keep(0);
end;
что неправильно? какого хрена вылетает рантайм при вызове
IntS?
строки вида
asm
move al,20h
out 20h,al
end;
я умышлено опустил, т.к. старый обработчик всёравно это делает.
в чём же касяк?
а если в Int9 добавляю строки вида:
if port[$60] = n then begin
SetIntVec($9, @IntS);
IntS;
Halt(0);
end;
то может тачка и не виснет, но на клаву точно не реагирует.



Вопрос отправлен: 03.07.2003, 03:33
Отправитель: di@ib

[Следующий вопрос >>] [Список вопросов]

Отвечает URiS

Здравствуйте, di@ib!
Процедуру Int9 следует описывать так:
{$F+}
procedure Int9; interrupt;
begin
....
inline ($9C);
IntS;
end;
{$F-}

*EMan1.4 © Bob Johnson | Expert: URiS (newff.narod.ru)


Ответ отправлен: 04.07.2003, 09:30
Отправитель: URiS


Отвечает Tancho

Здравствуйте, di@ib!
Давай твоя прога в Приложение!Тогда будем думать!
------------------------------
procedure Int9; interrupt;
begin
....
IntS;
end;
------------------------------- Это не прога, а какой то
кусок! Экспертый не шаманов - они думают на базе конкретные
вешчил


Ответ отправлен: 03.07.2003, 09:25
Отправитель: Tancho


Отвечает Ayl

Здравствуйте, di@ib!
Во-первых, interrupt-процедура должна описываться с модификатором far или с опцией {$F+}.
Во-вторых, перед вызовом старого обработчика надо в стеке сохранить флаги, т.к. обработчик завершается по iret.
В общем, см. пример в Приложении.
Кстати, зачем во втором случае у тебя Halt (0)? Да и в условный оператор нужно добавить ветку else со строчками:
asm
mov al, 20h
out 20h, al
end;
иначе клава точно повиснет...

Приложение:

Ответ отправлен: 03.07.2003, 10:10
Отправитель: Ayl


Отвечает Bill

Приветствую Вас, di@ib!
Естественно, что ответить точно невозможно, т.к. именно в том, как написана процедура прерывания (Int9), и затыка.
Но одно точно - в обработчиках прерываний не следует вызывать другие процедуры(!): обработчик должен работать максимально быстро. Он должен выполнить всю до прихода следующего сигнала.
Далее, вызов процедуры не есть вызов обработчика: перед вызовом обработчика сохраняется в стеке программы адрес возврата и состояние флагов процессора, при выходе, естественно, из стека они забираются и восстанавливаются. Вызвав процедуру, Вы положили в стек адрес возврата, а флаги нет. Но при выходе из "правильного" обработчика IntS, их забрали слово (WORD) в качестве флагов. Это может и нет так страшно, если б это слово не было адресом возврата (сегментом кода CS).
То есть при выходе Вы окажетесь совсем в другом сегменте, где Вашей программой и не "пахнет", набор байт процессор попытается выполнить как команды
Есть отличная книжка для начинающих К.Г. Финогенов "Самоучитель по системным функциям MS-DOS", М. - 1993 год


Ответ отправлен: 03.07.2003, 10:28
Отправитель: Bill


Отвечает _vt

Здравствуйте, di@ib!
Рабочий пример установки обработчика int9 есть во встроенной справке Паскаля на ключевое слово keep. Вкратце:
1) перед вызовом старого обработчика у тебя не сохраняются флаги в стеке
(asm
pushf
call ints
end;

или
inline($9c);
intS
)
2) в куске твоего кода не вижу директивы {$M xxx, 0, 0}, надеюсь, где-то есть... :-)
3) логику последнего куска не понимаю вообще... :-(

---===*** E-Man 1.2 - Powerful toy***===---


Ответ отправлен: 04.07.2003, 20:40
Отправитель: _vt



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (38)
C / C++ (24)
Perl (4)
Builder / Delphi (17)
Pascal (23)
Basic / VBA (8)
Java / JavaScript (11)
PHP (4)
MySQL / MSSQL (5)
Криптография (2)
WinAPI (4)
Пользователю
Windows 95/98/Me (30)
Windows NT/2000/XP (24)
"Железо" (22)
Поиск информации (16)
Администратору
Windows NT/2000/XP (13)
Linux / Unix (5)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное