Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






ЛАБОРАТОРНА РОБОТА N 2. COM-файли.




 

Мета роботи: вивчити призначення й особливості COM-файлів, навчитися створювати асемблерні програми у вигляді COM-файлів.

КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

Программу, що може виконуватись, можна створювати не тільки у вигляді EXE-файлу, як було показано в лабораторній роботі N1_2, але й у вигляді COM-файлу. Прикладом командного файлу може служити COMMAND.COM. Програми у вигляді EXE-файлу й у вигляді COM-файлу мають наступні розходження.

1. Розмір програми. Програма у форматі EXE може мати будь-як розмір. COM-програма обмежен розміром одного сегмента і не перевищує 64 Кбайт. Розмір COM-файлу завжди менше розміру EXE-файлу. Одна з причин цього - відсутність у COM-файлі спеціального 512-байтового заголовка EXE-файлу.

2. Сегмент стека. У EXE-програмі необхідно визначити сегмент стека. У COM-програмі стік генерується автоматично. По цьому при створенні асемблерной програми, що буде перетворена в COM-файл, сегмент стека повинна бути опущена. Якщо максимальний розмір сегмента (64ДО) достатній для програми, то MS DOS установлює регістр SP на кінець сегмента (FFFE). Це вершина стека. Якщо програма займає весь сегмент, тобто місця для стека недостатньо, то MS DOS установлює стек наприкінці пам'яті.

3. Сегмент даних. У EXE-програмі звичайно визначається сегмент даних і регістр DS инициализируется адресою цього сегмента. У COM-програмі всі дані повинні знаходитися в кодовому сегменті. У такий спосіб у COM-програмі у Вас буде тільки один сегмент - сегмент кодів.

4. Ініціалізація. На початку EXE-програми виконується запис у стек значення регістра DS, нуля й ініціалізація регістра DS. Так сегменти стека і даних у COM-програмі не визначені, те ці кроки в ній відсутні. При завантаженні COM-програми в оперативну пам'ять усі сегментні регістри містять адреса префікса програмного сегмента (PSP) - 256-байтового (100h) блоку резервируемого MS DOS в оперативній пам'яті перед EXE- і COM-програмою. Тому що регістр CS також буде встановлений на початок PSP, Вам треба установити його на початок Вашої програми. Виконується це директивою ORG 100h після директиви SEGMENT. Ця директива установить значення покажчика команд (зсув відносно CS) 100h.

5. Створення COM-файлу.

При роботі в пакеті MASM Ви створюєте EXE-файл, як було показано в лабораторній роботі N1_2. При цьому компоновщиком буде видане повідомлення:

Warnіng: No STACK Segment (Сегмент стека не визначена).

Це повідомлення можна проігнорувати.

Для перетворення EXE-фала в COM-файл використовується програма EXE2BІ. Уведіть командний рядок виду:

[шлях]exe2bіn [шлях]ім'я_файлу.exe,[шлях]ім'я_файлу.com

Тому що перший файл завжди має розширення.exe, те його можна не вказувати. Для втрого файлу за замовчуванням прийняте розширення.bіn, тому вкажіть розширення.com явно.

При роботі в пакеті TASM для створення COM-файлу необхідно в процесі компонування вказати опцію /t. Командний рядок при компонуванні буде мати вид: [шлях]tlіnk/t objfіles,comfіles,mapfіles,lіbfіles,deffіles

При цьому виконуваний файл буде за замовчуванням мати розширення.com.

Давайте перетворимо програму з лабоатороной роботи N1_2 у вид, необхідний для створення COM-програми.

SEGCOD SEGMENT PARA 'CODE'

ASSUME CS:SEGCOD,SS:SEGCOD,DS:SEGCOD,ES:SEGCOD

ORG 100H

BEGІ: JMP MAІ

DB 12 DUP(?)

MAІ PROC NEAR

SUB BX,BX;обнулить регістр BX

ADD BX,10;додати до вмісту BX 10

MOV CX,20;занести в CX 20

ADD BX,CX;додати CX до BX

SUB BX,CX;відняти CX з BX

RET

MAІ ENDP

SEGCOD ENDS

END BEGІ

Зверніть увагу, які були зроблені зміни.

1. Сегмент стека і сегмент даних відсутні.

2. Директива ASSUME инициализирует усі сегментні регістри адресою початку сегмента кодів.

3. Директива ORG 100h установлює покажчик команд на початок Вашої програми (після PSP).

4. Команда JMP (безумовний перехід) служить для обходу області даних.

5. Після мітки крапки входу у Вашу програму (BEGІ) коштує двокрапка. Його призначення буде розглянуто в лабораторній роботі N.

6. Процедура MAІ задана з параметром NEAR (внутрішня) тому що її початок уже не є крапкою входу в програму.

 

ПІДГОТОВКА ДО РОБОТИ

1. Вивчити короткі теоретичні відомості і рекомендовану літературу.

2. Перетворити вихідний текст програми "Завдання N1", підготовлений для лабораторної роботи N 1_1 для створення COM-файлу.

 

РОБОЧЕ ЗАВДАННЯ

Набити підготовлену програму, оттранслировать її, скомпонувати, перетворити в COM-файл, налагодити.

Запустити програму на виконання. Перевірити, чи здійснюється повернення в MS DOS.

 

ВИМОГА ДО ЗВІТУ

У звіті зафіксувати текст файлу з підготовленою програмою.

 

КОНТРОЛЬНІ ПИТАННЯ

1. Назвіть основні відмінності EXE- і COM-програми.

2. Як формується стек у COM-програмі?

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных