Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Assume es:a, ds:b, cs:c. Контрольные вопросы. Задания. 3. Средства компиляции программ на ассемблере и Примеры их использования




ASSUME ES: A, DS: B, CS: C

Если между соседними директивами ASSUME имеются команды, то объединять такие директивы не следует.

 

Контрольные вопросы

1. Дайте определение директивы.

2. На какие группы делятся директивы?

3. В каком виде описываются директивы?

4. Опишите синтаксис директивы.

5. Может ли один программный сегмент содержать и данные и команды?

6. Для чего используется директива END?

7. Что означает символ «? » в описании переменной?

8. Для чего используется директива DUP?

9. Где в тексте программы располагается директива ASSUME?

10. Для чего используются директивы OFFSET и SEG?

 

Задания

1. Опишите переменные x, y, z с помощью директив управления данными как байт, слово и двойное слово и назначьте переменным начальные значения.

2. Определите адрес ячейки памяти откуда в регистр AXзаписывается значение:

а) MOV AX, DS: 100

б) MOV AX, CS: 5

в) MOV AX, DS: 065

г) MOV AX, DS: 017

3. Опишите структуру Music с полями: название песни, исполнитель, длительность, рейтинг и массив M типа структуры, где собрана информация о 15 песнях.

4. Опишите структуру Comp с полями: тип процессора, частота процессора, объем ОЗУ, объем жесткого диска, наличие встроенного модема и массив C типа структуры, где собрана информация о 10 системных блоках.

 

3. СРЕДСТВА КОМПИЛЯЦИИ ПРОГРАММ НА АССЕМБЛЕРЕ И ПРИМЕРЫ ИХ ИСПОЛЬЗОВАНИЯ

 

Для компиляции программ, написанных на языке ассемблера, используются следующие программы:

1. транслятор Turbo Assembler (исполнительный файл TASM. EXE);

2. компоновщик Turbo Linker (исполнительный файл TLINK. EXE).

Транслятор выполняет ассемблирование программы – транслирует команды процессора в машинный объектный код и генерирует OBJ-модуль. Формат OBJ-модуля уже приближен к исполнительной форме, но еще не готов к выполнению. На этапе ассемблирования транслятором могут выдаваться ошибки и предупреждения. Появление ошибки прекращает работу транслятора и OBJ-модуль не генерируется – необходимо устранить ошибку и провести повторное ассемблирование программы. Предупреждения не прекращают работу транслятора, OBJ-модуль генерируется, но программа может выполняться некорректно из-за наличия каких-то логических ошибок в ней, на что и указывают предупреждения.

Компоновщик выполняет преобразование OBJ-модуля в исполнительный файл COM или EXE. Различие между этими файлами будет рассмотрено ниже. При использовании компоновщика имеется возможность объединить несколько OBJ-модулей в один исполнительный файл. Этот прием обычно используется при написании больших программ, состоящих из нескольких программных модулей. Также на этапе компоновки есть возможность подключить к программе какие-либо библиотеки.

Процесс подготовки программы к выполнению включает в себя ассемблирование программы с помощью транслятора Turbo Assembler и дальнейшую компоновку с помощью компоновщика Turbo Linker.

3. 1 Исполнительный файл типа COM

В исполнительном файле типа COM можно разместить только один физический сегмент. Поэтому при написании COM программы все команды и данные должны находиться в одном программном сегменте. При выполнении программы в единственном физическом сегменте располагается и стек. Стек «растет» сверху вниз – с конца физического сегмента к его началу. Размер программного сегмента с учетом возможного размера стека не должен превышать 64 Кб. В противном случае стек программы «налезет» на коды команд и данные, что может привести к некорректной работе программы. Размер COM файла не превышает 64 Кб, и в нем содержатся только машинные коды процессора и данные программы. Коды и данные физического сегмента COM файла размещаются не с нулевого смещения, а со смещения 100h (256 в десятичной с/с). С нулевого смещения располагается специальная структура данных объемом 256 байт, называемая префиксом программного сегмента. Обращение к данным и меткам в программе должно выполняться по сумме смещения переменной или метки и числа 256. Для этого служит директива ORG, задающая число, которое будет прибавляться ко всем смещениям, используемым для обращения к переменным и меткам программы. Это число используется только для прямой адресации, т. е. при обращении к переменным с непосредственным указанием их адресов. Формат директивы ORG следующий:

ORG < число>

 

Директива ORG указывается в программном сегменте перед первой командой или меткой. Пример программы типа COM:

MySegment SEGMENT

ORG 100h

ASSUME CS: MySegment, DS: MySegment

Start:

< команда>

. . .

< команда>

< вызов_функции_завершения_программы>

< данные>

. . .

< данные>

MySegment ENDS

END Start

Перед выполнением программы типа COM операционная система настраивает регистры CS, DS, ES, SS на начало физического сегмента, в котором размещаются коды и данные программы. Поэтому в дополнительной настройке эти сегментные регистры не нуждаются.

Сегмент программы типа COM должен обязательно начинаться с команды, иначе компоновщик зафиксирует ошибку. Компоновщик также фиксирует ошибку, если в программе типа COM есть команды, в которых явным образом используются значения сегментных адресов программных сегментов. Например, команда

Code SEGMENT

. . .

MOV AX, Code

. . .

Code ENDS

 

будет являться ошибочной для программы типа COM, поскольку в регистр AX предпринимается попытка занести значение сегмента программного сегмента Code, а COM файл не имеет специальной информации для возможности выполнения этой команды.

Завершение программы типа COM можно выполнить командой RET, которая перейдет на адрес, указанный в вершине стека. Стек инициализируется операционной системой и в него записывается адрес ячейки памяти, находящейся в префиксе программного сегмента. Эта ячейка памяти содержит команду завершения программы.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...