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

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


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

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 132
от 10.05.2005, 11:50

Администратор:Калашников О.А.
В номере:Вопросов: 3, Ответов: 5


Вопрос № 20432: У меня вопрос... Через что запускать резидентную программу, чтобы она оставалась в памяти? А то запускаю её из виндовса и она всё время выгружается из памяти... Когда запускаешь её из командной строки она остаётся резидентной, но у меня в резиден...
Вопрос № 20472: Нужно составить 16-разрядную программу. Используя функции BIOS вывода на экран, построив произвольное плоское изображение, выполнить плавный сдвиг экрана, перемещая начало изображения на одну строку. Т.е нужно, чтобы, например, закрашенный пр...
Вопрос № 20475: Пивет! Вопрос Стасу. Я задавал вопрос по поводу резидентного калькулятора ( №19813 ). На что вы ответили: "Ты вызываешь процедуру CALC из прерывания INT9 - т.е. у тебя запрещены все прерывания и клава работать не будет. Пока ...

Вопрос № 20432
У меня вопрос... Через что запускать резидентную программу, чтобы она оставалась в памяти? А то запускаю её из виндовса и она всё время выгружается из памяти...
Когда запускаешь её из командной строки она остаётся резидентной, но у меня в резиденте контроль за девятым прерыванием (нажатием клавиши), но в командной строке при нажатие клавиши ничего не происходить только пишется команда. Что делать?
Отправлен: 04.05.2005, 14:32
Вопрос задал: edson (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Стас
Здравствуйте, edson!
Если никто не хочет отвечать попробую я...
Чего ты хочешь добится? Чтобы резидентная прога для ДОС перехватывала виндовс?
Если тебе надо именно ДОС - значит нужно запускать из под досовских оболочек или "командной строки" или еще лучше "голого ДОСа". Тогда прога должна работать пока работает "командная строка" и перехватывает ввод который идет только в "ней".
И что должна делать резидентная прога, мы же не знаем, может так и должно быть ("только пишется команда"), может нужно нажать комбинацию, которую "придерживает" винды...
Вообщем подробнее описывай, что у тебя есть и что нужно. Симптомы.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 06.05.2005, 01:34

Отвечает: Евгений Иванов
Здравствуйте, edson!
это вопрос совершенно не по Ассемблеру.
используй различные оболочки , типа Volkov Comm. И другие.
Настрой их параметры (режим работы) - в свойствах ссылки запуска.
И система windows будет запускать их в режиме, приближённом к ДОС.
также можно использовать различные эмуляторы.
например, vmware. dosbox, virtual pc... ищите..
например, используя dosbox, я запускал ДОС-программы и это было так, как будто перед тобой 486-компьютер. эмулирует очень хорошо!
ну и конечо, vmware отлично запускает машины (не только ДОС, но и linux и т.п.)!
Всего хорошего!
зы. могу посоветовать также сообщество в жж - http://www.livejournal.com/community/useful_faq/
там можно задать любой вопрос по любой тематике - и получите ответ даже быстрее, чем в rusfaq, потому что людей там больше (намного).
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 07.05.2005, 11:43


Вопрос № 20472
Нужно составить 16-разрядную программу.
Используя функции BIOS вывода на экран, построив произвольное плоское изображение, выполнить плавный сдвиг экрана, перемещая начало изображения на одну строку.
Т.е нужно, чтобы, например, закрашенный прямоугольник или круг (что проще?) плавненько съехал вниз экрана.
Отправлен: 05.05.2005, 08:16
Вопрос задал: MentalR (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Евгений Иванов
Здравствуйте, MentalR!
смотри приложение и файл.
не стал делать функции BIOS, а просто работа с видеопамятью.
переделай функцию Line если нужно.

Приложение:

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 07.05.2005, 15:22


Вопрос № 20475
Пивет!
Вопрос Стасу.
Я задавал вопрос по поводу резидентного калькулятора ( №19813 ).
На что вы ответили:
"Ты вызываешь процедуру CALC из прерывания INT9 - т.е. у тебя запрещены все прерывания и клава работать не будет. Пока
корректно не выйдешь из Int9. Т.е. тебе надо переместить вызов CALC скажем в int2f(по флагу), а в Int9 поставить флаг. "
Поясние, пожалуйста, поподробнее - как поставить флаг, что это такое и как эго использовать?
Отправлен: 05.05.2005, 09:17
Вопрос задал: x3m (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Ayl
Здравствуйте, x3m!
А можно я отвечу? Все-таки вопрос всем экспертам отправил...
Под флагом понимается любая переменная в памяти, которая может принимать 2 значения: установлен или сброшен. Вначале флаг сброшен. Когда ты проверяешь в Int9 клавишу и понимаешь, что надо вызвать свой резидент, то в эту переменную заносишь значение "установлен". А в прерывании Int2f проверяешь этот флаг и если он установлен, то переходишь на свою подпрограмму. А если нет - выходишь из прерывания.
Кстати, рекомендация использования прерывания Int2f выглядит странной, т.к. это программное прерывание и вероятность его частого использования достаточно мала. Лучше всего использовать прерывания от таймера (Int8 или Int1c) или прерывание DOS Inactivity (Int28).
В приложении см. скелет написания этих процедур.
P.S. Попробуй найти книжку Касаткина А.И. "Пpофессиональное пpогpаммиpование на
языке Си. Системное пpогpаммиpование", Минск, Высшая школа, 1993, третий том. Там подробно описано создание резидентной программы на Си с описанием, какие и почему надо перехватывать прерывания и как их обрабатывать.

Приложение:

Ответ отправил: Ayl (статус: Профессор)
Отправлен: 05.05.2005, 13:01
Оценка за ответ: 5

Отвечает: Стас
Здравствуйте, x3m!
В принципе Ayl все ответил, лучше чем мог бы я. :)
И все же: в проге (в резидентной её части) выделяешь один байт (flag db 0), скажем, и по какому либо событию ставишь или опускашь биты этого байта - получаешь 8 флагов типа "да"-"нет". Либо кладешь туда число символизирущее чтолибо или содержащее какулибо информацию. Ну типа того.
Насчет Int2f(Мультиплексное прерывание) - так советует мне некое руководство (см. прил.).
Int28(Квант времени DOS) - тоже хорошо, но: "ВАЖНО: Popup-программа НЕ должна использовать функций DOS с номерами вплоть до 0cH, пока она выполняется внутри INT 28H".
Int1c - тоже, что и Int8 - "Поскольку программа INT 1cH выполняется во время низкоуровневого аппаратного прерывания, вы должны помнить, что система еще не сбросила контроллер прерываний и потому другие аппаратные прерывания, в том числе прерывание от клавиатуры, не будут происходить при работе INT 1cH (т.е. вы не получите ввода пользователя).
Большинство popup-программ предпочитают перехватывать вектор INT 08H , вызывать
первоначальный вектор, а затем уже выполнять операции, зависящие от времени,
после того как BIOS закончит свою обслугу."
Вот примерно этим я руководствовался... Если есть другая инфа - просветите.

Приложение:

Ответ отправил: Стас (статус: Практикант)
Отправлен: 06.05.2005, 01:25
Оценка за ответ: 5


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное