![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 13.04.2017
Сообщений: 3
|
![]()
Здравствуйте. Пытаюсь загрузить оверлей в asm8086 под досбоксом, вроде даже грузит, однако при попытке его выполнения просто повисает программа.
В основной программе: Сегмент данных: Код:
Код:
Код:
Код:
В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях.
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
У тебя что-то много лишнего в коде. Видно, что скоммуниздел исходник из каких-то старых источников, т.к. в таком стиле уже давно никто не пишет. Попробую объяснить на пальцах..
Для DOS-exe выделять память не обязательно, т.к. при запуске файла на исполнение, DOS выделяет для программы сразу всю/свободную память, а это без малого 16-сегментов по 64Кб. Никто не запрещает нам описывать в своих программах столько сегментов, на сколько хватит памяти. Например, занял ты уже три сегмента по 64Кб: STACK/DATA/CODE, так занимай сразу ещё один и для оверлея, обозвав его к примеру "OVER". Зачем возиться с fn.4Ah - непонятно! Называть сегменты можешь как-угодно, только не заразервированными словами: Код:
В своём коде, ты вызываешь оверлей как CALL FAR, а возвращаешь управление (из тела оверлея) через RET. Так нельзя делать: Код:
Вот пример более простого варианта на FASM'e.. Обычно, код самого оверлея я оформляю в виде бинарника. Дальше, копирую его в отведённый сегмент внутри родительской программы, и вызываю на исполнение. По соображению наглядности, проверка на ошибку опущена: Код:
Код:
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 13.04.2017
Сообщений: 3
|
![]()
Спасибо. :3
Да, кодец нагло скрал - в моём распоряжении лишь паршивенькая методичка по 8086 с этим примером, да ещё и с опечатками. Гугл знать не знает об оверлеях, да и я тоже.
В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях.
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
gn,fur,
немного об оверлеях -- Р. Джордейн. «Справочник программиста персональных компьютеров типа IBM PC, XT и AT» глава 7.2 "Создание драйвера устройства" на примере ANSI.SYS |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 28.03.2013
Сообщений: 22
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
..в полне возможно. масмом не пользуюсь, поэтому не буду утвержать обратное. Я привык в фасму, а у него в досе нет "PROC -> ENDPROC"
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Функции в языке С. Передача параметров в функции. Создание многофайловых проектов | fifaman | Общие вопросы C/C++ | 6 | 28.12.2014 15:30 |
Табулирование заданной функции и определение максимального и минимального значения функции в таблице | Марина1986 | C/C++ Сетевое программирование | 0 | 07.05.2013 11:31 |
Использование подпрограммы-функции: Вычислить значение функции (Турбо паскаль) | RealUnited | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 05.12.2012 20:34 |
Построение графика функции, мигание(затухание) шарика в минимумах функции | kas1m_rus | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 27.05.2012 20:28 |
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets | dmitrii6120 | Помощь студентам | 6 | 14.11.2011 20:10 |