Вопрос № 50046: Приветствую вас, уважаемые эксперты и читатели.
Вопрос чисто теоретического плана. В COM-файлах задается смещение командой ORG 100h, верно? Для сей команды не генерируется машинного кода, так? Следует вопрос - как shell определяет, что необх...
Вопрос № 50.046
Приветствую вас, уважаемые эксперты и читатели.
Вопрос чисто теоретического плана. В COM-файлах задается смещение командой ORG 100h, верно? Для сей команды не генерируется машинного кода, так? Следует вопрос - как shell определяет, что необходимо установить значение счетчика команд равное 100h? Только по расширению com в имени файла?
Второй момент, используется ли ORG в EXE-файлах? Генерируются ли машинные коды или команда подменяется каким-либо набором инструкций?
И третий момент. Инструкция end start. Как оболочка получает адрес начала программы (равно главной функции)? Должна ли главная функция быть первой в листинге на asm или она помещается на нужное место линкером? Как вообще это выглядит?
Отправлен: 24.07.2006, 14:21
Вопрос задал: Uranium (статус: 1-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: EPDSota
Здравствуйте, Uranium!
1. Shell определяет по содержанию и расширению - если файл имеет EXЕ заголовок - стартовый адрес берется из заголовка, если нет - то он считается COM- файлом и ему даеться стартовый адрес 100.
2. Используется. Машинных кодов нет. Просто в заголовке ЕХЕ пишеться, что файл стартует с данного адреса.
3. В листинге быть первой необязательно. Адрес начала программы пишется в заголовке файла.
--------- Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 24.07.2006, 14:34 Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ и указание направления :-)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Uranium!
Вот тут найдешь ответы на многие вопросы
http://www.megalib.com/books/189/formats.pdf
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Ответ отправлен: 24.07.2006, 15:24 Оценка за ответ: 5 Комментарий оценки: Что и было мне необходимо.Благодарю
Отвечает: Волков Павел Юрьевич
Здравствуйте, Uranium!
Формат .com возник во времена DOS, досовский загрузчик файлов размещал с 0h адреса PSP заголовок, а код программы по адресу 100h. Виндовый загрузчик загружает .com файл (в системе загрузочные файлы могут иметь расширение .exe, .com, .bat, .cpl, .scr, .cmd ), определив его причастность к DOS программам загружает ntvdm.exe, который обеспечивает работу программы(режим совместимый с MSDOS), в целях совместимости загружает по родному 100h. .COM программа состоит из одного сегмента в 64KB, размещая в нем код, данные
и стек. org 100h - директива линкеру, пофиксить адреса (смещения) в программе на начинающиеся со смещения 100h для создания .com файла. Код соответственно, для org 100h, не генерится и в .exe файлах она не используется. end start указывает на точку входа программы(По end start определяется точка входа), при этом start может быть как меткой, так и названием функции. У .сом программы нет главной функции, программа должна начинаться с точки входа (org 100h), при необходим
ости можеш расположить начальный код ниже, но должен передать управлени через jmp startcode. PS:о запуске программ в Windows написано у Соломона, Руссиновича"Внутреннее устройство Windows" Успехов.
--------- Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 3-ий класс)
Ответ отправлен: 24.07.2006, 20:49 Оценка за ответ: 5 Комментарий оценки: Благодарю за развернутый ответ и участие :)