АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Пример 4. Время вычисления EA (регистровая относительная адресация): 9 тактов

Читайте также:
  1. I. 1.1. Пример разработки модели задачи технического контроля
  2. IV. ТИПОВОЙ ПРИМЕР РАСЧЕТОВ.
  3. X. примерный перечень вопросов к итоговой аттестации
  4. Б2. Пример №2
  5. Буду на работе с драконом примерно до 21:00.
  6. Булевы функции. Способы задания. Примеры.
  7. В нашем примере каждый доллар первоначального депозита обеспечил 5 дол. средств на банковских счетах.
  8. В некоторых странах, например в США, президента заменяет вице-
  9. В примере
  10. В странах Востока (на примере Индии и Китая)
  11. Вания. Одной из таких областей является, например, регулирова-
  12. Вариационные задачи с подвижными границами. Пример в теории управления.
JMP dword ptr [SI+15]; межсегментный косвенный переход.

Базовое время: 24+EA.

Время вычисления EA (регистровая относительная адресация): 9 тактов.

Имеются 2 обращения к памяти за новыми значениями IP и CS.

Если адрес слова четный, то

Т=24+9=33 (такта)=330 (нс).

Если адрес слова нечетный, то

Т=24+9+2*4=41 (такт)=410 (нс).

Время выполнения линейного участка программы равно сумме времен выполнения всех команд этого участка.

Оценим время выполнения ветвящейся программы на примере следующей задачи:

 

Ниже представлен текст соответствующей программы в предположении, что A, B и y - переменные длиной 1 байт, имеющие идентификаторы MA, MB и MY соответственно. Здесь и далее полагаем, что используемые адреса в сегменте данных - четные. Рядом с каждой командой указано количество тактов синхронизации, необходимое для ее выполнения (идентификаторы соответствуют прямому режиму адресации):

MOV BL,5; 4 MOV AL,MA; 10 CMP AL,MB; 15 JG OUT; 4/16 INC BL; 3OUT: MOV MY,BL; 15

Таким образом, если A>B, то программа выполняется за 60 тактов, в противном случае - за 51 такт.

Если оба случая равновероятны, то

Тср = (Т1+Т2)/2 = 55.5 (такта).

В общем случае для данной программы

Тср = 4+10+15+16*p1+(4+3)*p2+15=44+16*p1+7*p2.

где p1 и p2 - вероятности перехода в команде JG в случае выполнения и невыполнения условия соответственно (p1+p2=1).

Если известна количественная или хотя бы качественная оценка соотношения p1 и p2, то можно минимизировать среднее время выполнения данного фрагмента программы.

Пусть известно, что A>B при 90% различных исходных данных. Тогда для рассмотренной программы:

Тср = 44+0.9*16+0.1*7=59.1 (такта).

При обратном соотношении, то есть при p1=0.1:

Тср = 44+0.1*16+0.9*7=51.9 (такта).

Следовательно, при p1=0.1 быстрее будет выполняться программа, меняющая условие перехода:

MOV BL,6; 4 MOV AL,MA; 10 CMP AL,MB; 15 JNG OUT; 4/16 DEC BL; 3OUT: MOV MY,BL; 15

Она дает то же самое среднее время выполнения программы при p1=p2, но выигрыш при p1>p2 и проигрыш при p1<p2.

В циклических программах тело цикла выполняется многократно. В силу этого целесообразно, по возможности, минимизировать этот участок программы даже за счет увеличения времени выполнения подготовительных операций и операций обработки результатов циклического участка.

Рассмотрим это положение на следующем примере. Пусть необходимо вычислить произведение двух целых положительных чисел длиной в слово (S=M*N), не используя команду умножения. Предполагаем, что операнды располагаются в памяти по эффективным адресам, вычисляемым как [SI+2A] и [1148h], а результат также не превышает одного слова и должен быть записан в память по адресу [BX+SI]. Предполагаем также, что все адреса в сегменте данных четные.

Решать задачу будем по следующей схеме:

 

Рассмотрим несколько возможных вариантов решения.

Вариант 1.

MOV [BX+SI],0; 17 MOV AX,[1148h]; 10CYCLE: ADD [BX+SI],AX; 23 DEC [SI+2A]; 24 JNZ CYCLE; 4/16

Вариант 2.

MOV AX,[1148h]; 10 MOV CX,[SI+2A]; 17 SUB DX,DX; 3CYCLE: ADD DX,AX; 3 DEC CX; 2 JNZ CYCLE; 4/16 MOV [BX+SI],DX; 16

Вариант 3.

MOV AX,[1148h]; 10 MOV CX,[SI+2A]; 17 SUB DX,DX; 3CYCLE: ADD DX,AX; 3 LOOP CYCLE; 15/17 MOV [BX+SI],DX; 16

Вариант 1 использует минимальное общее количество команд. В варианте 2 обработка идет в регистрах общего назначения, но не используется специальная команда цикла, которая использована в варианте 3.

Сравнительные характеристики этих вариантов представлены в табл. 9.3

Таблица 9.3.
Вариант Количество команд Длина программы, (байт) Время выполнения, (такт)
      63N+15
      21N+34
      20N+34

Таким образом, даже несмотря на некоторое увеличение длины, программа, реализованная в вариантах 2 и 3, при достаточно больших N выполняется почти втрое быстрее, чем реализованная в варианте 1.

Так как время выполнения этих программ зависит от величины лишь одного сомножителя, то в том случае, когда известны относительные величины сомножителей, это время можно минимизировать, используя в качестве счетчика наименьший из сомножителей.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)