В данном документе акцентировано внимание на мелочи, в которых студенты чаще всего ошибаются.
В данной работе после компилирующихся программ имеют большую важность ответы на вопросы. Далее приведены наводящие вопросы, которые должны помочь ответить на основные правильно.
- COM модуль получается при помощи EXE2BIN.COM LAB1.EXE LAB1.COM.
- Сколько сегментов минимум может содержать EXE модуль? А максимум? Чем ограничено?
- Все ли директивы перечислили? Чем директивы отличаются от операторов? Попробуйте убрать все директивы: программа компилируется? Найден ли CS? Работает ли программа?
- Какие команды допустимы в EXE, которые недопустимы в CS? Почему? Откуда берется информация, благодаря которой недопустимые команды можно использовать в EXE?
- В чем отличие заголовка от таблицы настройки (relocation table)? Является ли одно другим? Если нет, то в чем разница? Где какая часть начинается? До куда продолжается, каков размер?
- Точно ли вы учитываете размер стэка при сравнении "плохого" и "хорошего" модулей EXE?
- Точно ли скриншоты содержимого модулей совпадают с тем, что описано в структуре модулей, как то: смещения начала сегментов, взаимное расположение сегментов, размер?
- Что находится в области недоступной памяти?
- С какого адреса начинается запущенная программа и в каком диапазоне адресов находится недоступный участок памяти?
- Как выглядит разметка оперативной памяти? Почему 640кб?
- Что запрещает писать в память программы или в недоступную память? Есть ли механизм защиты?
- В DOS нет реестра.
- Если в DOS нет реестра, то откуда берется среда?
- Что-такое COMMAND.COM? Как он связан со средой ОС и загруженной программой?
- Проверьте, что параметры запуска программы корректно обрабатываются (символы не затираются, хвост вообще отображается и т.д.)
- Постарайтесь сделать вывод информации максимально компактной: например табличкой, где каждай строка -- один MCB.
- Последние 8 байт MCB != принадлежность MCB процессу.
- Что тогда точно характеризует принадлежность MCB процессу?
- Небольшой MCB из 144 байт -- что это? Принадлежит ли он процессу?
- Учитывайте ответы на эти вопросы при подсчете объема программы.
- В лабораторной обязательно надо устанавливать у резидетного обработчика прерывания собственный стек перед исполнением и восстанавливать SS:SP прерванной программы после.
- После установки стека надо обязательно аккуратно сохранить значения всех используемых внутри обработчика регистров.
- Обязательно проверьте, что стек восстанавливается в исходное состояние в конце.
- Как проверять: виртуальная машина (не эмулятор!) DOS и запуск afd нем: если adf корректно запускается и закрывается без ошибок, зависаний и глюков, то скорее-всего все работает верно.
- Как отлаживать: закомментировать тело обработчика и построчно (зеркальными парами строк) добавлять обратно. В afd переходить стрелочками на непосредственный код обработчика и начать исполнять его: состояние регистров и стека до начала исполнения обработчика (и установки собственного стека в нем) и после меняться не должно.
- Все аналогично прошлой работе, но кроме этого не забывайте явно в отчете указать что конкретно меняет ваш обработчик прерывайний.
- Подумайте внимательно, можно ли с вашим обработчиком ввести имя вашей программы, afd.com и quit. Если нет -- лучше выберите другие коды.
- Ctrl+C в dosbox не работает. Самое надежное для проверки: вирутальная машина.
- Обязательно проверяйте, что прогамму можно запустить из другой директории и LAB2.COM тоже загружается (если присутствует рядом с модулем, конечно; если нет -- то об этом должно сообщаться пользователю)
- Оверлей получается путем применения EXE2BIN.COM OVL1.ASM OVL.OVL
- В бинарном виде оверлея только код: никаких таблиц, пустот и прочего: только байты машинного кода.
- Проверяйте запуск из директории как в 6й работе.
- Корректно обрабатывайте отсутствие оверлея.