- •5) Базовая архитектура пк ibm pc , процессор с точки зрения программиста, регистры общего назначения, регистр флагов.
- •Int 21h ; вывели на экран ‘7’
- •25) Исполняемые сом-файлы, их отличие от ехе-файлов, примеры.
- •1) Title Prog_Сom-файл
- •2) .Model tiny
- •2) Extrn p2: far public p2
- •2) Второй вид заголовка:
- •If_l macro X, y, l
Int 21h ; вывели на экран ‘7’
MOV DL, DAN + 2
MOV REZ + 1, DL
Int 21h
MOV DL, DAN +1
MOV REZ + 2, DL
Int 21h
MOV DL, DAN
MOV REZ + 3, DL
Int 21h
;
MOV AH, 4CH
Int 21h
Start endp
CSeg ends
end Start
Директива TITLE определяет заголовок, который будет появляться на каждой странице листинга программы. Он может содержать до 60 символов. Если имя, указанное в заголовке, удовлетворяет символическим требованиям и нет директивы NAME, то этот заголовок может использоваться как имя модуля.
Директива PAGE устанавливает количество строк на странице листинга (это 1 параметр. У нас он отсутствует. По умолчанию 57 строчек на странице), количество символов в строке (это 2 параметр. У нас 120, по умолчанию 80, может изменяться от 60 до 132). Если PAGE без параметров, процессор переводит печать на следующую страницу листинга.
21) Модели памяти, организация программы с помощью точечных директив (упрощенные директивы сегментации)
Точечные директивы повышают уровень программ на Ассемблере, выполняют некоторые функции за прогр.
Первая точечная директива, с нее начинается программа, это
.MODEL - директива, определяющая модель выделяемой памяти для программы.
Модель памяти определяется параметром:
tiny – под всю программу выделяется 1 сегмент памяти,
small – под данные и под программу выделяются по одному сегменту,
medium – под данные выделяется один сегмент, под программу выделяется несколько сегментов,
compact – под программу выделяется один сегмент, под данные выделяется несколько сегментов,
large - под данные и под программу выделяются по n сегментов,
huge – позволяет использовать сегментов больше, чем позволяет ОП.
Пример использования точечных директив в программе на Асс-ре.
.MODEL small
.STACK 100h
.DATA
St1 DB ‘Line1’, ‘$’
St2 DB ‘Line2’, ‘$’
St3 DB ‘Line3’, ‘$’
.CODE
begin: MOV AH, 9 ; 9 - номер функции вывода строки на экран
MOV DX, offset St1 ; адрес ST1 должен содержаться в регистре DX
Int 21h
MOV DX, offset St2
Int 21h
MOV AH, 4CH
Int 21h
end begin
‘$’ – конец строки, которую необходимо вывести на экран
В результате выполнения программы:
Line1 Line2 Line3.
Если необходимо вывести
Line1
Line2
Line3,
то в сегмент данных необходимо внести изменения
St1 DB ‘Line1’, 13, 10, ‘$’
St2 DB ‘Line2’, 0Dh, 0Ah, ‘$’
St3 DB ‘Line3’, ‘$’
25) Исполняемые сом-файлы, их отличие от ехе-файлов, примеры.
Ассемблер – это язык программирования низкого уровня и программа, написанная на Ассемблере, должна пройти три этапа обработки на компьютере, как и программа, написанная на любом другом языке программирования.
I этап - преобразование исходного модуля в объектный – ассемблирование. Исходных модулей может быть 1 или несколько.
II этап - с помощью программы редактора связей объектные модули объединяются в загрузочный, исполняемый модуль.
III этап – выполнение программы.
Существует два типа исполняемых модулей (исполняемых файлов): exe-файл (<имя>.exe) и com-файл (<имя>.com). В результате выполнения второго этапа получается исполняемый exe-файл, чтобы получить com-файл, необходимо выполнить еще один этап обработки - преобразование exe-файла в com-файл.
После обработки компилятором и редактором связей получаем exe-файл, который содержит блок начальной загрузки, размером не менее 512 байт, но существует возможность создания другого вида исполняемого файла, который может быть получен на основе exe-файла с помощью системной обрабатывающей программы EXE2BIN.com или его можно создать с помощью среды разработки. Но не из всякого exe-файла можно создать com-файл. Исходный файл, для которого можно создать com-файл, должен удовлетворять определенным требованиям.
Исходный файл должен занимать только один сегмент памяти (и программа и данные только в одном сегменте). Стек не описывается, создается автоматически. Поскольку данные вместе с программой, то сегмент данных не определяется отдельно. Программа располагается в одном сегменте, все сегментные регистры перед началом выполнения программы в качестве значений содержат адрес блока, который называется префиксом сегмента программы (PSP). Этот блок размером 256 байтов размещается и перед EXE, и перед COM-файлом. Так как адрес первой исполняемой команды оказывается отстоящим на 256 байтов от начала сегмента, то для обхода этого блока используется специальная директива ORG 100h.
Если сравнивать EXE и COM-файлы для одной и той же программы, то вторые файлы меньше как минимум на 512 байт. Но с другой стороны первые файлы могут занимать произвольное количество сегментов в отличие от вторых. Таким образом рекомендуются небольшие программы писать под COM исполнительные файлы.
Отличия exe-файла от com-файла:
В com-файлах отсутствует блок начальной загрузки и следовательно он занимает меньше места, чем exe-файл.
exe-файл может занимать произвольный объем ОП. com-файл может занимать только один сегмент памяти.
Стек создается автоматически ОС, поэтому у пользователя нет необходимости выделять для него место. Данные располагаются там же, где и программа.
Т.к. вся программа содержится в одном сегменте, перед выполнением программы все сегментные регистры содержат в качестве значения адрес префикса программного сегмента – PSP
PSP - 256 байтный блок, который содержится как в exe-файле, так и в com-файле, и т.к. адрес первой исполняемой команды отстоит на 256 (100h) байтов от адреса начала сегмента, то сразу после директивы ASSUME используется специальная директива org 100h, осуществляющая обход префикса программного сегмента
Пример создания com-файла.
