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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|