
- •Префиксы повторения
- •3.11.6. Команды управления микропроцессором
- •Команды управления флагами
- •Команды синхронизации
- •3.11.7. Принципы кодирования команд
- •3.11.8. Время выполнения команд
- •3.12. Организация подпрограмм
- •3.12.1. Директивы описания подпрограмм
- •3.12.2. Передача параметров в подпрограммы
- •Передача параметров через регистры
- •Передача параметров через общие ячейки памяти
- •Передача параметров через зоны параметров
- •Передача параметров через стек
- •3.13. Организация системы прерываний
- •3.13.1. Внешние прерывания
- •3.13.2. Внутренние прерывания
- •3.13.3. Обслуживание прерываний
- •3.14.Нестандартные типы данных
- •3.14.1. Структуры
- •3.14.2. Записи
- •3.15.Макрокоманды
- •3.15.1. Макроопределения и макровызовы
- •3.15.2.Сравнение макрокоманд и подпрограмм
- •3.15.3. Макрокоманды повторения
- •3.15.4. Библиотеки макроопределений
- •IncludeИмя_библиотеки
3.11.8. Время выполнения команд
В общем случае полное время выполнения команды включает в себя две составляющие:
1) базовое время выполнения команды;
2) время вычисления эффективного адреса EA (при обращении к памяти).
Время вычисления EA зависит от используемого способа адресации операнда и приведено в табл.3.6.
Базовое время выполнения команды определяется типом команды и приводится в системе команд МП как ее характеристика [10]. Например, команда MOV reg,mem имеет базовое время Тбаз = 8 тактов. При этом предполагается, что выполняемая команда уже выбрана и находится в очереди команд.
Приведенные значения базового времени всегда соответствуют обработке байтов или слов по четному адресу. Если слово имеет нечетный адрес, то МП обращается к нему за два цикла шины. Следовательно, для МП ВМ86 при обращении к каждому слову по нечетному адресу, а для МП ВМ88 при обращении к каждому слову необходимо прибавить к приведенному значению базового времени 4 такта синхронизации на каждое обращение к памяти.
Наличие в команде префикса замены сегмента увеличивает базовое время ее выполнения на 2 такта.
Таблица 3.6
Время вычисления эффективного адреса
-
Способ адресации
Значение EA
Число тактов
Прямая
disp
6
Косвенная
(BX), (SI), (DI)
5
Базовая
(BX), (BP)+disp
9
Индексная
disp+(SI), (DI)
9
Базовоиндексная
(BX), (BP)+(SI), (DI)
8
Относительная
базовоиндексная
(BP)+(DI)+disp
(BX)+(SI)+disp
(BP)+(SI)+disp
(BX)+(DI)+disp
11
11
12
12
Необходимо учитывать, что при выполнении команд типа ADD mem,reg обращение к памяти осуществляется дважды: за операндом и для записи результата, что увеличивает время выполнения еще на 4 такта.
Пример 3.111:
Вычислить время выполнения командMOV ES:[BX], DX,
ADD ES:[BX+SI], DX
ТMOV= Тбаз.MOV+ TEA+TES= 8+5+2 = 15 тактовдля МП ВМ86 по четному адресу;
TMOV= Tбаз.MOV+ TEA + TES+ TW= 8+5+2+4 = 19 тактовдля МП ВМ88 по любому адресу, для МП ВМ86 по нечетному адресу;
TADD= Tбаз.ADD+ TEA+ TES+ 2TW= 16+8+2+24 = 34 тактадля МП ВМ88 по любому адресу, для МП ВМ86по нечетному адресу.
Первоначально время выполнения команды вычисляется в тактах сигнала синхронизации CLK МПС. Для его преобразования в секунды количество тактов необходимо умножить на длительность такта.
Знание времени выполнения команд необходимо при проектировании времязависимых программ.
3.12. Организация подпрограмм
В качестве подпрограмм оформляются либо повторяющиеся фрагменты программы, либо независимые программные исполнители. Как правило, перед использованием подпрограммы приводится описание, определяющее ее имя и тип.
3.12.1. Директивы описания подпрограмм
Для описания подпрограммы используются директивы ассемблера PROCиENDP. Формат описания имеет вид:
Имя_подпрограммы PROC{Тип_подпрограммы}
. . . . . . . ;Тело подпрограммы
. . . . . . . ;(описание выполняемых действий)
RET ;Возврат
Имя_подпрограммы ENDP
Директива PROCоткрывает текст подпрограммы, присваивая ей имя и тип, а директиваENDPзакрывает его. Формальный параметр "Тип_подпрограммы" может принимать фактические значенияNEARилиFAR.
Вызов подпрограммы и возврат из нее осуществляется командами CALL и RET (см. подраздел 3.11.4"Команды для организации подпрограмм"). Выбор типа подпрограммы определяется положением команды вызова CALL относительно описания подпрограммы.
Тип NEARиспользуется, если описание подпрограммы и команда ее вызова CALL находятся в одном и том же сегменте программного кода. В этом случае реализуется внутрисегментный вызов процедуры. По умолчанию (без указания типа) подпрограмма имеет типNEAR.
Тип FARиспользуется, если описание подпрограммы и команда ее вызова CALL находятся в различных сегментах программного кода. В этом случае реализуется межсегментный вызов процедуры.
Команда RET обеспечивает соответствующий вызову возврат в основную программу и, как правило, завершает текст подпрограммы.
Пример 3.112:
Написать подпрограмму для вычисленияS=AB,гдеAиBслова в памяти.
Code SEGMENT
. . . . . . .
SubW PROC NEAR ;Описание подпрограммы
MOV AX, A
SUB AX, B
MOV S, AX
RET
SubW ENDP
. . . . . . .
CALL SubW ;Внутрисегментный вызов подпрограммы
. . . . . . .
Code ENDS
В зависимости от типа вызова и возврата команды CALL и RET реализуют различные действия. Поэтому при трансляции программы ассемблер формирует для них машинные коды, соответствующие типу подпрограммы, указанному в ее описании.
В случае, если подпрограмма имеет тип FAR, то и внутрисегментный вызов ее реализуется как межсегментный.
Пример3.113:
Написать подпрограмму для вычисленияS=ABс возможностью вызова из различных сегментов программного кода.
Code1 SEGMENT
. . . . . . .
SubWF PROC FAR ;Описание процедуры
MOV AX, A ;для межсегментного
SUB AX, B ;вызова
MOV S, AX
RET
SubWF ENDP
. . . . . . .
CALL FAR PTR SubWF ;Внутрисегментный вызов
. . . . . . .
Code1 ENDS
Code2 SEGMENT
. . . . . . .
CALL FAR PTR SubWF ;Межсегментный вызов
. . . . . . .
Code2 ENDS