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

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


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

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

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

Выпуск № 197
от 26.07.2005, 21:00

Администратор:Калашников О.А.
В рассылке:Подписчиков: 250, Экспертов: 16
В номере:Вопросов: 2, Ответов: 5


Вопрос № 23819: Здравствуйте! Пожалуйста помогите разобраться с программой (резидент находящийся в памяти и срабатывающий при вызове int 20h). Почему-то при вызове int 20h из др. прог. происходит просто исправный выход без срабатывания резидента. ...
Вопрос № 23827: Здравствуйте! Подскажите как выделить общий кусок памяти, для обмена данными между двумя моими прогами, (под дос). Главная программа на basic, вторая генерится первой на asme. Поэтому нужно както еще сообщить главной программе этот адрес (луч...

Вопрос № 23.819
Здравствуйте!

Пожалуйста помогите разобраться с программой (резидент находящийся в памяти и срабатывающий при вызове int 20h).
Почему-то при вызове int 20h из др. прог. происходит просто исправный выход без срабатывания резидента.

C Уважением, Данат.

Приложение:

Отправлен: 21.07.2005, 13:36
Вопрос задал: Danat (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Ayl
Здравствуйте, Danat!

Не знаю, у меня сработало.
Только почему-то при запуске резидента FAR глюканул, осталась только командная строка. Но строка "Poka!" была выведена.
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 21.07.2005, 14:29
Оценка за ответ: 4

Отвечает: DSota
Здравствуйте, Danat!

Программа хорошо запускается и правильно срабатывает - печатает строку и ждет кнопки! Есть только несколько пожеланий:
1. iret после jmp необязаетелен - все равно никогда не выполинтся...
2. Перед выполнением ожидания клавиатуры (ah=10h int 16h) может быть ситуация: Если программа, которую завершали, завершилась по нажатию какой-нибудь клавиши, то и резидент закончит работу по ней... Т.е. ожидания нажатия клавиши не получится...

Думаю недоработка может быть в том - что программа выходит другим способом (int 21h)... Или резидент и программа, выполняющая int20h запускаются в Виндовс в разных ДОС машинах...

Приложение:

---------
Открыть глаза навстречу солнцу.

Ответ отправил: DSota (статус: Практикант)
Отправлен: 21.07.2005, 14:43
Оценка за ответ: 5


Вопрос № 23.827
Здравствуйте!
Подскажите как выделить общий кусок памяти, для обмена данными между двумя моими прогами, (под дос).
Главная программа на basic, вторая генерится первой на asme. Поэтому нужно както еще сообщить главной программе этот адрес (лучше будет если она сама и выделит этот кусок памяти).
Прим: через временный файл не хочу работать.
Также могу включить асмовый код в главную.
Отправлен: 21.07.2005, 17:10
Вопрос задал: Артем Талипов (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Voituk Alexander
Здравствуйте, Артем Талипов!
Есть такой вариант (я им пользуюсь)

В главной проге выделяешь память для совместной работы и вешаешься на какое нибудь прерывание, которое не используется (например 60h). В обработчике возвращаешь адрес этой памяти в каком нибудь регистре. Вторая программа вызывает это прерывание и получает адрес, а потом уже работает с ним.
Или можно еще писать в область данных БИОСа по адресу 0000:4F0h находится 16 байт памяти для связи между приложениями. Выделяешь в главной проге память и пишешь в эту область адрес, а второй прогой считываешь его и работаешь.
Ответ отправил: Voituk Alexander (статус: 9-ый класс)
Отправлен: 21.07.2005, 17:56

Отвечает: DSota
Здравствуйте, Артем Талипов!

Можно загрузить асмовую программу, как оверлей - и тогда вся ее память будет доступна из программы на бейсике.
Т.е. Во второй программе делаешь какую либо переменную, как дальнюю ссылку.
При работе бейсиковская программа, загружает асмовскую как оверлей,
выделяет память, изменяет эту ссылку в асмовской программе и запускает ету программу.

И еще можнол в самой асмовской программе создать большой неинициализированный сегмент данных, тогда при загрузке ДОС сам выделит память под этот сегмент и нужно будет просто считать его адрес и обмениваться данными через него...

---------
Открыть глаза навстречу солнцу.
Ответ отправил: DSota (статус: Практикант)
Отправлен: 21.07.2005, 18:23

Отвечает: Евгений Иванов
Здравствуйте, Артем Талипов!
используй общее прерывание и обслуживание через функции.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 21.07.2005, 22:08


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

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

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

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

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


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


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

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное