Время выполнения программы складывается из времен выполнения каждой команды программы.
Базовые времена выполнения некоторых команд приведены в табл. 9.1. Время вычисления
| Команды | Адресация | Число тактов | Число обращений к памяти |
|---|---|---|---|
ADD, SUB, AND, OR |
|
3 9+ 16+ 4 16+ |
0 1 2 0 2 |
MOV |
|
10 2 8+ 9+ 4 10+ |
1 0 1 1 0 1 |
MUL |
множитель 8 бит - множитель 16 бит - множитель 8 бит - множитель 16 бит - |
70…77 118…133 (76…83)+ (124…139)+ |
0 0 1 1 |
CMP |
|
3 9+ 4 10+ |
0 1 0 1 |
INC, DEC |
16 бит - 8 бит -
|
2 3 15+ |
0 0 2 |
Условные переходы, кроме JCXZ |
нет перехода есть переход |
4 16 |
0 0 |
LOOP |
нет перехода есть переход |
5 17 |
0 0 |
JMP |
короткий внутрисегментный прямой косвенный регистровый межсегментный прямой косвенный |
15 - 15 18+ 11 - 15 24+ |
0 - 0 1 0 - 0 2 |
Примечание: R - адресация к регистру; A - к аккумулятору; S - к памяти; I -
| |
Число тактов синхронизации для вычисления |
|---|---|
| Прямой | 6 |
| Косвенный | 5 |
| Относительный | 9 |
Базово-индексный
|
- 7 8 |
Относительный базово-индексный
|
- 11 12 |
Если при вычислении физического адреса производится замена
Базовое время выполнения некоторых команд зависит также от значения операндов. Типичными примерами этого служат команды умножения и деления (см. табл. 9.1). Так,
Для команд условного перехода в табл. 9.1 приведено два времени: меньшее соответствует случаю, когда условие не выполняется и переход не производится, а большее
Проиллюстрируем сказанное несколькими примерами. Для всех примеров будем полагать для простоты расчетов, что частота синхронизации равна 100 МГц (длительность такта 10 нс).
Пример 1.
ADD ES:[BX],DX
Команда формата "память-регистр".
Базовое время: 16+
Время вычисления
Обозначение "ES:" в DS используется регистр ES. Эта операция требует 2 тактов синхронизации.
Команда обрабатывает слово. Если слово имеет нечетный адрес, то
Т=16+5+2+2*4=31 (такт)=310 (нс)
Если слово имеет четный адрес, то
Т=16+5+2=23 (такта)=230 (нс)
Пример 2.
MUL [BX]
Умножение без знака содержимого AL на операнд, адрес которого задан в команде. Операнд находится в памяти.
Базовое время: (76...83)+
Время вычисления
Т=(76...83)+5 = (81...88) тактов = (810...880) нс
Пример 3.
JZ MET ; перейти на MET, если "ноль"
Базовое время: 4 такта, если нет перехода, и 16 тактов, если переход выполняется.
Других затрат времени нет.
Т=4 такта=40 нс перехода нет. Т=16 тактов=160 нс переход выполняется.
Пример 4.
JMP dword ptr [SI+15] ; межсегментный косвенный переход.
Базовое время: 24+
Время вычисления
Имеются 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 ; 3
OUT: 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 ; 3
OUT: 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] ; 10
CYCLE: 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 ; 3
CYCLE: 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 ; 3
CYCLE: ADD DX,AX ; 3
LOOP CYCLE ; 15/17
MOV [BX+SI],DX ; 16
Вариант 1 использует минимальное общее количество команд. В варианте 2 обработка идет в регистрах общего назначения, но не используется специальная
Сравнительные характеристики этих вариантов представлены в табл. 9.3
| Вариант | Количество команд | Длина программы, (байт) | Время выполнения, (такт) |
|---|---|---|---|
| 1 | 5 | 14 | 63N+15 |
| 2 | 7 | 15 | 21N+34 |
| 3 | 6 | 14 | 20N+34 |
Таким образом, даже несмотря на некоторое увеличение длины, программа, реализованная в вариантах 2 и 3, при достаточно больших N выполняется почти втрое быстрее, чем реализованная в варианте 1.
Так как время выполнения этих программ зависит от величины лишь одного сомножителя, то в том случае, когда известны относительные величины сомножителей, это время можно минимизировать, используя в качестве счетчика наименьший из сомножителей.
Время выполнения программы складывается из времен выполнения каждой команды программы.
Базовые времена выполнения некоторых команд приведены в табл. 9.1. Время вычисления
| Команды | Адресация | Число тактов | Число обращений к памяти |
|---|---|---|---|
ADD, SUB, AND, OR |
|
3 9+ 16+ 4 16+ |
0 1 2 0 2 |
MOV |
|
10 2 8+ 9+ 4 10+ |
1 0 1 1 0 1 |
MUL |
множитель 8 бит - множитель 16 бит - множитель 8 бит - множитель 16 бит - |
70…77 118…133 (76…83)+ (124…139)+ |
0 0 1 1 |
CMP |
|
3 9+ 4 10+ |
0 1 0 1 |
INC, DEC |
16 бит - 8 бит -
|
2 3 15+ |
0 0 2 |
Условные переходы, кроме JCXZ |
нет перехода есть переход |
4 16 |
0 0 |
LOOP |
нет перехода есть переход |
5 17 |
0 0 |
JMP |
короткий внутрисегментный прямой косвенный регистровый межсегментный прямой косвенный |
15 - 15 18+ 11 - 15 24+ |
0 - 0 1 0 - 0 2 |
Примечание: R - адресация к регистру; A - к аккумулятору; S - к памяти; I -
| |
Число тактов синхронизации для вычисления |
|---|---|
| Прямой | 6 |
| Косвенный | 5 |
| Относительный | 9 |
Базово-индексный
|
- 7 8 |
Относительный базово-индексный
|
- 11 12 |
Если при вычислении физического адреса производится замена
Базовое время выполнения некоторых команд зависит также от значения операндов. Типичными примерами этого служат команды умножения и деления (см. табл. 9.1). Так,
Для команд условного перехода в табл. 9.1 приведено два времени: меньшее соответствует случаю, когда условие не выполняется и переход не производится, а большее
Проиллюстрируем сказанное несколькими примерами. Для всех примеров будем полагать для простоты расчетов, что частота синхронизации равна 100 МГц (длительность такта 10 нс).
Пример 1.
ADD ES:[BX],DX
Команда формата "память-регистр".
Базовое время: 16+
Время вычисления
Обозначение "ES:" в DS используется регистр ES. Эта операция требует 2 тактов синхронизации.
Команда обрабатывает слово. Если слово имеет нечетный адрес, то
Т=16+5+2+2*4=31 (такт)=310 (нс)
Если слово имеет четный адрес, то
Т=16+5+2=23 (такта)=230 (нс)
Пример 2.
MUL [BX]
Умножение без знака содержимого AL на операнд, адрес которого задан в команде. Операнд находится в памяти.
Базовое время: (76...83)+
Время вычисления
Т=(76...83)+5 = (81...88) тактов = (810...880) нс
Пример 3.
JZ MET ; перейти на MET, если "ноль"
Базовое время: 4 такта, если нет перехода, и 16 тактов, если переход выполняется.
Других затрат времени нет.
Т=4 такта=40 нс перехода нет. Т=16 тактов=160 нс переход выполняется.
Пример 4.
JMP dword ptr [SI+15] ; межсегментный косвенный переход.
Базовое время: 24+
Время вычисления
Имеются 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 ; 3
OUT: 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 ; 3
OUT: 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] ; 10
CYCLE: 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 ; 3
CYCLE: 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 ; 3
CYCLE: ADD DX,AX ; 3
LOOP CYCLE ; 15/17
MOV [BX+SI],DX ; 16
Вариант 1 использует минимальное общее количество команд. В варианте 2 обработка идет в регистрах общего назначения, но не используется специальная
Сравнительные характеристики этих вариантов представлены в табл. 9.3
| Вариант | Количество команд | Длина программы, (байт) | Время выполнения, (такт) |
|---|---|---|---|
| 1 | 5 | 14 | 63N+15 |
| 2 | 7 | 15 | 21N+34 |
| 3 | 6 | 14 | 20N+34 |
Таким образом, даже несмотря на некоторое увеличение длины, программа, реализованная в вариантах 2 и 3, при достаточно больших N выполняется почти втрое быстрее, чем реализованная в варианте 1.
Так как время выполнения этих программ зависит от величины лишь одного сомножителя, то в том случае, когда известны относительные величины сомножителей, это время можно минимизировать, используя в качестве счетчика наименьший из сомножителей.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.