Кодирование команд (часть 3)
Оценка влияния структуры программы на время ее выполнения
Время выполнения программы складывается из времен выполнения каждой команды программы. Время выполнения команды можно определить, умножая число тактов синхронизации, необходимых для выполнения команды, на длительность такта. Это время можно выразить в виде суммы базового времени выполнения, которое зависит от типа команды, и времени вычисления эффективного адреса, если операнд располагается в памяти. При определении базового времени предполагается, что выполняемая команда уже выбрана из памяти и находится в очереди команд. В противном случае требуется учесть длительность дополнительных тактов синхронизации, необходимых для выборки команды.
Базовые времена выполнения некоторых команд приведены в табл. 9.1. Время вычисления эффективного адреса (ЕА) зависит от режима адресации (табл. 9.2). Последний столбец в табл. 9.1 показывает число обращений к памяти, необходимых для выполнения команды. Чтобы определить время выполнения команды, следует учесть выравнивание операнда, то есть его расположение в оперативной памяти. Обращение к однобайтному операнду не требует дополнительных тактов синхронизации. Время обращения к слову памяти зависит от его адреса. Если слово имеет нечетный адрес, то его передача из оперативной памяти занимает 2 цикла шины, длящихся по 4 такта синхронизации каждый. Следовательно, каждое обращение к слову с нечетным адресом требует четырех дополнительных тактов синхронизации.
Команды | Адресация | Число тактов | Число обращений к памяти |
---|---|---|---|
ADD, SUB, AND, OR |
RR RS SR RI, AI SI |
3 4 |
0 1 2 0 2 |
MOV |
SA, AS RR RS SR RI SI |
10 2 4 |
1 0 1 1 0 1 |
MUL |
множитель 8 бит - R множитель 16 бит - R множитель 8 бит - S множитель 16 бит - S |
70…77 118…133 |
0 0 1 1 |
CMP |
RR RS, SR RI, AI SI |
3 4 |
0 1 0 1 |
INC, DEC |
16 бит - R 8 бит - R S |
2 3 |
0 0 2 |
Условные переходы, кроме JCXZ |
нет перехода есть переход |
4 16 |
0 0 |
LOOP |
нет перехода есть переход |
5 17 |
0 0 |
JMP |
короткий внутрисегментный прямой косвенный регистровый межсегментный прямой косвенный |
15 - 15 11 - 15 |
0 - 0 1 0 - 0 2 |
Примечание: R - адресация к регистру; A - к аккумулятору; S - к памяти; I - непосредственная адресация
Если при вычислении физического адреса производится замена сегментного регистра (вместо заданного по умолчанию используется другой, определенный префиксом замены), то время выполнения команды увеличивается на 2 такта.
Базовое время выполнения некоторых команд зависит также от значения операндов. Типичными примерами этого служат команды умножения и деления (см. табл. 9.1). Так, время выполнения команды умножения, реализованной по алгоритму умножения дополнительных кодов с пропуском такта суммирования, определяется количеством пар соседних несовпадающих разрядов (01 или 10), так как при комбинациях 00 или 11 такт суммирования с нулевым слагаемым отсутствует. Поэтому, например, для 8-разрядных операндов максимальное время умножения будет при значении множителя 01010101, а минимальное - при ненулевом множителе 10000000 (напомним, что числа в персональной ЭВМ представляются в дополнительном коде, поэтому указанный код соответствует числу -128). То есть в первом случае команда умножения будет выполняться на 7 тактов суммирования дольше, что соответствует значениям, приведенным в табл. 9.1.
Для команд условного перехода в табл. 9.1 приведено два времени: меньшее соответствует случаю, когда условие не выполняется и переход не производится, а большее соответствует реализации перехода. Во втором случае учитывается необходимость нового заполнения очереди команд и выборки следующей команды. Это же относится и к командам циклов.
Проиллюстрируем сказанное несколькими примерами. Для всех примеров будем полагать для простоты расчетов, что частота синхронизации равна 100 МГц (длительность такта 10 нс).
Пример 1.
ADD ES:[BX],DX
Команда формата "память-регистр".
Время вычисления EA (регистровая косвенная адресация): 5 тактов.
Обозначение "ES:" в символической записи команды показывает, что в процессе формирования физического адреса операнда происходит замена сегментного регистра. Вместо используемого по умолчанию при данном режиме адресации сегментного регистра DS используется регистр ES. Эта операция требует 2 тактов синхронизации.
Команда обрабатывает слово. Если слово имеет нечетный адрес, то
Т=16+5+2+2*4=31 (такт)=310 (нс)
Если слово имеет четный адрес, то
Т=16+5+2=23 (такта)=230 (нс)