Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-50_1.docx
Скачиваний:
9
Добавлен:
02.08.2019
Размер:
707.62 Кб
Скачать
  1. Этапы выполнения Ассемблерной программы на эвм, понятие com-файла.

Ассемблер - язык низкого уровня, поэтому программа на нем должна пройти как минимум 3 этапа обработки. Процесс подготовки и отладки программы на языке ассемблера включает этапы подготовки файла с исходным текстом, его трансляции и компоновки и, наконец, отладки программы с помощью специальной программы интерактивного отладчика.

Подготовка исходного текста программы выполняется с помощью любого текстового редактора. Файл с исходным текстом должен иметь расширение ASM.

Трансляция исходного текста программы состоит в преобразовании предложений

исходного языка в коды машинных команд и выполняется с помощью транслятора с

языка ассемблера (т. е. с помощью программы ассемблера). Трансляторы различных разработчиков имеют некоторые различия, в основном в части описания макросредств. Однако входной язык (т. е. мнемоника машинных команд и других операторов и правила написания предложений ассемблера) для всех ассемблеров одинаков. В результате трансляции образуется объектный файл с расширением .OBJ

Компоновка объектного файла выполняется с помощью программы компоновщика

(редактора связей). Эта программа получила такое название потому, что ее основное

назначение - подсоединение к файлу с основной программой файлов с

подпрограммами и настройка связей между ними. Однако компоновать необходимо даже простейшие программы, не содержащие подпрограмм. Дело в том, что у компоновщика есть и вторая функция - изменение формата объектного файла и преобразование его в выполнимый файл, который может быть загружен в оперативную память и выполнен.

Однако существует возможность создания другого вида исходного файла - <имя>.COM

Чтобы получить исполняемый COM-файл необходимо выполнить еще один этап обработки(exe->COM). Нужно учитывать, что не любой исходный exe может быть преобразован в COM - для этого должны выполняться определенные условия, т.к COM - файлы отличаются от exe(необходимо сделать некоторые преобразования исходного текста, чтобы создать корректный COM-файл).

  1. Различие между exe - и com – файлами, требования, предъявляемые к исходному модулю, предназначенному для создания com – файла, примеры программ.

Различие между ЕХЕ – и СОМ:

1)Пред COM-файлом не располагается блок начальной загрузки и, соответственно, программа созданная как COM-файл занимает меньше места, чем exe.

2) EXE-файл может занимать произвольное кол-во сегментов, а COM-только 1.

3)Сегмент стека создается ОС автоматически, значит программисту не нужно выделять под него место.

4)Программа занимает 1 сегмент, значит данные располагаются в том же сегменте, т.е. не нужно выопределять адрес сегмента данных

5)Перед началом выполнения программы все сегментные регистры в качестве адреса имеют адрес специального блока PSP - это 256-байтовый блок, который располагается непосредственно и перед exe- и перед COM-файлом.

6)Т.к. начало программы отстоит от начала сегмента на 256 байт, то 1-й директивой в COM-файле должна быть директива обхода блока PSP:

org 100h; 100h(16-я сист.счисл.)=256 - обходит префикс программного сегмента

Пример создания COM-файла:

1) TITLE Prog_Com-file

Page 60,85; 60 строк по 85 символов

CSeg Segment Para 'Code'

ASSUME SS:CSeg, DS:CSeg, CS:CSeg

org 100h

Start: JMP Main; передача управления на метку Main

St1 DB 'String 1',13,10,'$'

St2 DB 'String 2','$'

Main Proc

MOV AH,9

LEA DX,St1

int 21h

LEA DX,St2

int 21h

Main endp

CSeg ends

End Start

2)С помощью точечных директив

.MODEl tiny

.CODE

JMP Met; передача управления на метку Met - пропускаем описания данных

St1 DB 'String 1','$'

Met: MOV AH, 09h

LEA DX,St1

int 21h

MOV AH,4Ch

int 21h

End Met

Данные можно было расположить в конце.

ЗАМЕЧАНИЯ:

-Не каждый исходный файл удовлетворяет условиям COM-файла

-Небольшие по размеру программы лучше создавать как COM-файлы

-Если программа написана как COM-файл, то exe из нее сделать не получится.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]