Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB1.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
81.92 Кб
Скачать

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

Принципы организации ввода/вывода текстовых и числовых данных

1. Цель работы: освоение принципов построения простейших консольных приложений на языке ассемблера для системы MS-DOS, ознакомление с командами и способами адресации языка ассемблера и правилами построения программ в соответствии со структурным способом программирования.

2. Основные теоретические положения

2.1. Построение com файлов

СОМ файл является самым простым видом исполняемого файла в системе MS-DOS и представляет собой точную копию программы в двоичном виде, в каком ее нужно загрузить в память. СОМ файлы не содержат дополнительного префикса. Они не содержат адресных констант, зависимых от адреса загрузки программы в память. Все в программе представлено как смещение с начала сегмента для кода, включая данные и стек. Следовательно, размер программы не может превышать 64 Кбайтов. Поэтому загрузка СОМ файлов сводится к определению достаточно большого свободного блока памяти, построению PSP (Program Segment Prefix) и считыванию всего файла в область после PSP.

В области PSP хранится специальная системная информация и информация для программы. Область PSP всегда занимает 256 байт. Содержимое и назначение этой области в данной лабораторной не рассматриваются.

Регистрам CS, DS, SS и ES присваивается значение сегмента программы (сегментный адрес PSP). Указатель инструкций IP получает значение 100Н. SP получает значение FFFEH, т.е. конец адресного пространства из 64 Кбайтов используется для стека. Байт по адресу FFFEH в стеке содержит 00Н, так что после команды RET в конце программы в IP получается значение 00Н, т.е. выполняется инструкция INT 20H, записанная в начале PSP.

Можно привести следующие практические правила создания COM файлов:

  1. Программа должна начинаться директивой ORG 100Н и входная точка должна быть в начале программы:

ORG 100

START:

<Тело программы>

END START

Так программа соответствует значению CS:IP после ее загрузки - CS содержит сегментный адрес PSP, a IP установлен в значение 100Н. Если нужно начать выполнение с другого места, первой инструкцией после ORG 100 должна быть JMP.

  1. Не допускается определять отдельные сегменты для данных и для стека. Определяется только сегмент для кода. Используется директива ASSUME, чтобы сопоставить все сегментные регистры сегменту для кода, например ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG.

  2. Данные можно располагать в произвольном месте программы, лишь бы не путать их с кодом. Рекомендуется однако расположить их в начале программы, чтобы не получить при ассемблировании ошибки при обращении к данным, которые еще не определены (forward reference). В таком случае программа должна начинаться инструкцией JMP, чтобы передать управление после данных.

  3. Не допускаются инструкции, которые имеют в качестве операндов сегментные адреса, например MOV AX.SEG DATA FIELD1. В частности, в начале программы отсутствует типичная для EXE файлов последовательность MOV AX.DSEG / MOV DS.AX (не определяется отдельный сегмент для данных).

  4. При загрузке программы SS, как и остальные сегментные регистры, имеет значение сегментного адреса PSP. SP указывает последний адрес 64-Кбайтового адресного пространства (стек заполняется от старших к младшим адресам). Если нужна программа меньшего размера, можно изменить SP еще до использования стека.

На рис. 1 представлен пример описания простейшего COM файла.

TITLE TestCom

CODESG SEGMENT PARA 'Code'

; Указание настройки сегментных регистров

assume CS:COOESG,DS:CODESG,SS:CODESG.ES:CODESG

ORG 100H ;Начало в конце PSР

BEGIN:

JMP MAIN ;0бход через данные

; Определение данных

VAR_A DW 259

VAR_B DW 3

VAR_C DW ?

MAIN PROC NEAR

;Основное тело программы

MOV AX , VAR_A

ADD AX , VAR_B

MOV VAR_C , AX

;Вернуться в DOS

RET

; Конец процедуры

MAIN ENDP

; Конец сегмента

CODESG ENDS

; Конец программы

END BEGIN

Рис. 1. Пример простейшей COM программы

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