Вопрос № 163081: Здравствуйте уважаемые эксперты! Не могу никак выйти из процедуры дальнего перехода на следующую за процедурой команду. Программа загружается в свободный сегмент, выполняет в нём какую-то работу, у меня это вывод строки 'QWERTY' на экран; зат...
Вопрос № 163.081
Здравствуйте уважаемые эксперты! Не могу никак выйти из процедуры дальнего перехода на следующую за процедурой команду. Программа загружается в свободный сегмент, выполняет в нём какую-то работу, у меня это вывод строки 'QWERTY' на экран; затем делает длинный переход в другой сегмент, выполняет там что-то, у меня, правда, ничего не делает, только заходит в сегмент 0BF00h и выходит; далее возвращается в первоначальный сегмент и продолжает работу, у меня это вывод 2-ой строки 'Work is done' Дальним
переходом захожу в сегмент 0BF00h, но ... Кажется, уже всё перепробовал: вместо retf прописывал и ret, и iret с предварительным занесение флагов pushf; оформлял переход и в виде процедуры, и не как процедуру; делал ссылки вперёд и назад; прописывал переменные А и В, как mov word ptr [A],0140h и mov word ptr [B],0BF00h; заводил ещё 2 новые переменные с указанием первоначального сегмента и смещения на 120h - ничего не помогает. В другом сегменте со смещения 0140h до
0FFEh только одна повторяющаяся команда идёт: ADD [BX+SI],AL. При этом при всех вариантах программа компилируется, но при запуске показывает только первую строку 'QWERTY'. В отладчике стек показывал следующее:
Stack +0 010E -Это адрес в памяти, по которому находится 40 01, т.е. 0140h - смещение дальнего перехода +2 26B0 - Это сектор, в который первоначально загружается программа +4 0000 Так же не может быть,
чтобы стек показывал № одного сегмента, а смещение другого сегмента. Один из вариантов программы прилагается. Даже не знаю, в чём может быть ошибка.
Приложение:
Отправлен: 23.03.2009, 21:00
Вопрос задал: Aistesis (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 12)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Aistesis!
Посмотрите приложение. После запуска, программа выводит первое сообщение, ожидает нажатия любой клавиши, записывает подпрограмму в текущий видеобуфер, выполняет её, выводит второе сообщение и завершается. Программа под тасм. Вопросы задавайте в мини-форуме. Удачи!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.