Лабораторна робота 1-lr1-ЛР1-5

Міністерство освіти і науки України

Санкт-Петербурзький Державний Електротехнічний Університет «ЛЕТІ»

Лабораторна робота №1

"Дослідження структур завантажувальних модулів"

Перевірив: Губкін А. Ф.

Дослідження відмінностей у структурах вихідних текстів модулів типів .COM та .EXE, структур файлів завантажувальних модулів та способів їх завантаження в основну пам'ять.

Функції та структури даних

Виведення рядка на екран

Визначення версії операційної системи, версії її модифікації, серійного та OEM номерів

Визначення типу IBM PC

Переклад із четвіркової системи числення до шістнадцяткової

Переклад із двійкової системи числення до шістнадцяткової

Переклад слова (2 байти) шістнадцяткову систему числення

Переклад із двійкової системи числення до десяткової

Послідовної дій, що виконуються утилітою

Визначається та виводиться на екран версія операційної системи

Визначається та виводиться на екран номер модифікації операційної системи

Визначається та виводиться на екран номер OEM операційної системи

Визначається та виводиться на екран серійний номер користувача операційної системи

Визначається тип IBM PC і за кодом цього на екран виводиться відповідний рядок

системи

У ході виконання даної лабораторної роботи я досліджував відмінності у структурах вихідних текстів завантажувальних модулів типів .COM і .EXE, структур файлів цих модулів та способи їх завантаження в основну пам'ять.

Відповіді на контрольні питання щодо лабораторної роботи №1

Відмінності вихідних текстівCOMіEXEпрограм

Скільки сегментів має міститиCOM-програма?

Рівно один сегмент

Не менше одного сегмента (один сегмент і більше)

Які директиви повинні обов'язково бути в текстіCOM-програми?

Чи всі формати команд можна використовувати уCOM-програмі?

Т.к. у COM-програмі всі сегментні регістри визначаються в момент запуску програми, а не в момент компіляції (ассемблювання), то неможливе використання, наприклад, таких конструкцій:

Відповідь на Примітку 1.

Не можна використовувати команди виду mov, seg

Наприклад, mov ax, seg CODE

Оскільки com-програма обмежена розмірів 64Кб, то не можна використовувати команду, яка займала б більше 64Кб ​​(включаючи дані). Також не можна використовувати команди, які працюють із 64-бітними регістрами.

Зараз такого не може бути, але теоретично можлива команда величезної довжини, яка б займала 64Кб ​​і більше (яка б у 16-чному вигляді виглядала б приблизно так: ABCD ... XYZABC ..., де кількість символів = 64 * 1024 = 65536).

Відмінності форматів файлівCOMіEXEпрограм

У «поганому» EXE дані та код містяться в одному сегменті.

Яка структура «хорошого»EXE? Чим він відрізняється від файлу "поганого"EXE?

У «хорошому» EXE дані, стек та код розділені за сегментами.

робота

Де segment_name - ім'я сегмента,

1, 2, 3, 4 – назви сегментів, куди встановлені відповідні регістри. Можна було б обійтися і без команди JMP, написавши на початку код, а потім дані.