Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 3).doc
Скачиваний:
143
Добавлен:
08.03.2015
Размер:
540.67 Кб
Скачать

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+24 = 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=AB,где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=ABс возможностью вызова из различных сегментов программного кода.

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