Лаборатория 1 - lr1 - LR1-5
Министерство на образованието и науката на България
Санкт Петербургски държавен електротехнически университет "ЛЕТИ"
Лаборатория №1
"Изследване на конструкциите на товарни модули"
Проверено от: Gubkin A.F.
Изследване на разликите в структурите на изходните текстове на модули от типа .COM и .EXE, файлови структури на зареждащи модули и начини за зареждането им в основната памет.
Функции и структури от данни
Отпечатване на низ на екрана
Определяне на версията на операционната система, версията на нейната модификация, серийни и OEM номера
Определение за тип IBM PC
Преобразуване от кватернер в шестнадесетичен
Преобразуване от двоичен в шестнадесетичен
Превод на думи (2 байта) шестнадесетична бройна система
Преобразуване от двоичен в десетичен
Последователни действия, извършвани от помощната програма
Открива и показва версията на операционната система
Номерът на модификацията на операционната система се определя и показва на екрана
Открива и показва OEM номера на операционната система
Серийният номер на потребителя на операционната система се определя и показва на екрана
Определя се типът на IBM PC и съответният ред се показва на екрана според кода на този тип
В тази лаборатория проучих разликите в структурата на източника на модулите за зареждане .COM и .EXE, файловите структури на тези модули и как се зареждат в основната памет.
Отговори на лабораторен тест №1
Разлики в изходния кодCOMиEXEпрограми
Колко сегмента трябва да съдържа еднаCOM програма?
Точно един сегмент
Поне един сегмент (един сегмент или повече)
Кои директиви трябва да има в текстаCOM програми?
Всички командни формати могат ли да се използват вCOM програма?
защото в COM програма всички сегментни регистри се определят по време на стартиране на програмата, а не по време на компилация (сглобяване), тогава е невъзможно да се използват например такива конструкции:
Отговор на бележка 1.
Не можете да използвате команди като mov, seg
Например mov axe, seg CODE
Тъй като com програма е ограничена до 64 Kb, не можете да използвате команда, която е по-голяма от 64 Kb (включително данни). Също така не можете да използвате команди, които работят с 64-битови регистри.
Сега това не може да бъде, но теоретично е възможна команда с огромна дължина, която би отнела 64 Kb или повече (което в 16-та форма би изглеждало така: ABCD ... XYZABC ..., където броят на знаците = 64 * 1024 = 65536).
Разлики във файловия форматCOMиEXEпрограми
В "лош" EXE, данните и кодът се съдържат в един и същ сегмент.
Каква е структурата на „добър“EXE? Как се различава от лош файлEXE?
В "добър" EXE, данните, стекът и кодът са разделени на сегменти.
Където име_на_сегмент е името на сегмента,
1, 2, 3, 4 - имената на сегментите, в които са зададени съответните регистри. Би било възможно да се направи без командата JMP, като се напише кодът в началото и едва след това данните.