Расчет времени выполнения программы
Система команд МП содержит 78 команд, реализующих 111 операций, и
приведена в таблицах, в которых:
1)в мнемонических изображениях двухадресных команд приемник указывается на первом месте, а источник - на втором;
3) признаки результата (S,Z,P,C и AC) устанавливаются ТОЛЬКО при выполнении большинства арифметических и логических команд, а также команды POP PSW;
4) мнемонические обозначения команд условного перехода, условного обращения к подпрограмме и условного возврата из подпрограммы составляются из символов соответственно J,C и R и необходимой мнемоники CC;
5) число тактов, необходимых для исполнения команд условных перехода, обращения к подпрограмме и возврата из нее, зависит от того, выполнено (знаменатель дроби) или не выполнено (ее числитель) условие, указанное в команде;
6) в описаниях команд для обозначения содержимого аккумулятора, иного регистра или ячейки памяти, на которые указывают SSS или DDD, используется запись (A),® или (M);
7) при записи мнемоники команды RP обозначает имя регистровой пары, а при записи кода команды - двухбитовый код регистровой пары
8) в колонке 'Код' приводится ШЕСТНАДЦАТЕРИЧНОЕ представление кода команды, если оно единственно, и ДВОИЧНОЕ - если под данной мнемоникой объединены несколько различных команд (операций); в последнем случае варьируемые разряды обозначены соответствующими символами (SSS,DDD,RP,CCC
Коды регистров и регистровых пар МП.
+-------------------------------------------------------+
¦ Регистры ¦ Пары регистров ¦
+-----------------------+-------------------------------¦
¦ Код ¦ Имя ¦ Код ¦ Имя ¦ Регистры пары ¦
¦ (SSS|DDD) ¦ (R|R1|R2) ¦ (RP) ¦ (RP) ¦ ст. - мл. ¦
+-----------+-----------+-------+-------+-------+-------¦
¦ 000 ¦ B ¦ 00 ¦ B ¦ B ¦ C ¦
¦ 001 ¦ C ¦ ¦ ¦ ¦ ¦
¦ 010 ¦ D ¦ 01 ¦ D ¦ D ¦ E ¦
¦ 011 ¦ E ¦ ¦ ¦ ¦ ¦
¦ 100 ¦ H ¦ 10 ¦ H ¦ H ¦ L ¦
¦ 101 ¦ L ¦ ¦ ¦ ¦ ¦
¦ 110 ¦ M' ¦ 11 ¦ SP ¦ - ¦ - ¦
¦ 111 ¦ A" ¦ 11'"¦ PSW ¦ A ¦ F ¦
+-------------------------------------------------------+
') М - ячейка памяти.
") A - аккумулятор.
'") используется только в командах PUSH PSW и POP PSW
Коды условий для команд условного перехода.
+---------------------------------------+
¦ Код ¦ Мнем. ¦ Условие ¦
¦ (CCC) ¦ (CC) ¦ (значение разряда PSW)¦
+-------+-------+-----------------------¦
¦ 000 ¦ NZ ¦ Не нуль : Z=0 ¦
¦ 001 ¦ Z ¦ Нуль : Z=1 ¦
¦ 010 ¦ NC ¦ Нет переноса : C=0 ¦
¦ 011 ¦ C ¦ Перенос : C=1 ¦
¦ 100 ¦ PO ¦ Нечетность : P=0 ¦
¦ 101 ¦ PE ¦ Четность : P=1 ¦
¦ 110 ¦ P ¦ Плюс : S=0 ¦
¦ 111 ¦ M ¦ Минус : S=1 ¦
+---------------------------------------+
Список команд передачи данных Таблица 1
----------------------------- =========
+----------------------------------------------------------------------+
¦ Мнемоника ¦ Код ¦ Длина ¦ Число ¦ Выполняемая ¦
¦ ¦ ¦команды ¦ тактов¦ функция ¦
+--------------+----------+--------+-------+---------------------
¦ MOV R1,R2 ¦ 01DDDSSS ¦ 1 ¦ 5 ¦ Пересылка из R1 в R2
¦ MOV R,M ¦ 01DDD110 ¦ 1 ¦ 7 ¦ Пересылка из M в R
¦ MOV M,R ¦ 01110SSS ¦ 1 ¦ 7 ¦ Пересылка из R в M
¦ MVI R,data8 ¦ 00DDD110 ¦ 2 ¦ 7 ¦ Пересылка непосредствен
¦ ¦ ¦ ¦ ¦ ных данных в регистр
¦ MVI M,data8 ¦ 36 ¦ 2 ¦ 10 ¦ Пересылка непосредст-
¦ ¦ ¦ ¦ ¦ венных данных в память
¦ LXI B,data16¦ 01 ¦ 3 ¦ 10 ¦ Загрузка непосредст-
¦ ¦ ¦ ¦ ¦ венных данных в рег.ВС
¦ LXI D,data16¦ 11 ¦ 3 ¦ 10 ¦ Загрузка непосредственных
¦ ¦ ¦ ¦ ¦ данных в рег. пару DE
¦ LXI H,data16¦ 21 ¦ 3 ¦ 10 ¦ Загрузка непосредственных
¦ ¦ ¦ ¦ ¦ данных в рег. пару HL
¦ LXI SP,data16¦ 31 ¦ 3 ¦ 10 ¦ Загрузка непосредственных
¦ ¦ ¦ ¦ ¦ данных в указатель стека
¦ LDAX B ¦ 0A ¦ 1 ¦ 7 ¦ Косвенная загрузка A
¦ ¦ ¦ ¦ ¦ по адресу рег. пары BC
¦ LDAX D ¦ 1A ¦ 1 ¦ 7 ¦ Косвенная загрузка A
¦ ¦ ¦ ¦ ¦ по адресу рег. пары DE
¦ LHLD addr ¦ 2A ¦ 3 ¦ 16 ¦ Прямая загрузка HL
¦ LDA addr ¦ 3A ¦ 3 ¦ 13 ¦ Прямая загрузка A
¦ STAX B ¦ 02 ¦ 1 ¦ 7 ¦ Косвенная запись A в па- ¦ ¦ ¦ мять по адресу пары BC
¦ STAX D ¦ 12 ¦ 1 ¦ 7 ¦ Косвенная запись A в па-
¦ ¦ ¦ ¦ ¦ мять по адресу пары DE
¦ SHLD addr ¦ 22 ¦ 3 ¦ 16 ¦ Прямая запись HL в память
¦ STA addr ¦ 32 ¦ 3 ¦ 13 ¦ Прямая запись A в память
¦ PUSH B ¦ C5 ¦ 1 ¦ 11 ¦ Пересылка BC в стек
¦ PUSH D ¦ D5 ¦ 1 ¦ 11 ¦ Пересылка DE в стек
¦ PUSH H ¦ E5 ¦ 1 ¦ 11 ¦ Пересылка HL в стек
¦ PUSH PSW ¦ F5 ¦ 1 ¦ 11 ¦ Пересылка A и F в стек
¦ POP B ¦ C1 ¦ 1 ¦ 10 ¦ Загрузка BC из стека
¦ POP D ¦ D1 ¦ 1 ¦ 10 ¦ Загрузка DE из стека
¦ POP H ¦ E1 ¦ 1 ¦ 10 ¦ Загрузка HL из стека
¦ POP PSW ¦ F1 ¦ 1 ¦ 10 ¦ Загрузка A и F из стека
¦ XTHL ¦ E3 ¦ 1 ¦ 18 ¦ Обмен между HL и стеком
¦ XCHG ¦ EB ¦ 1 ¦ 4 ¦ Обмен между HL и DE
¦ SPHL ¦ F9 ¦ 1 ¦ 5 ¦ Пересылка HL в SP
+---------------------------------------------------------------------
Список команд управления и ввода-вывода Таблица 2
--------------------------------------- =========
+-------------------------------------------------------------------+
¦ Мнемоника ¦ Код ¦ Длина ¦ Число ¦ Выполняемая ¦
¦ ¦ ¦ команды¦ тактов¦ функция ¦
+--------------+----------+--------+-------+------------------------¦
¦ JMP addr ¦ C3 ¦ 3 ¦ 10 ¦ Безусловный переход ¦
¦ Jcc addr ¦ 11CCC110 ¦ 3 ¦ 5/10 ¦ Условный переход по ¦
¦ ¦ ¦ ¦ ¦ условию cc (рис.3) ¦
¦ PCHL ¦ E9 ¦ 3 ¦ 5 ¦ Косвенный переход по ¦
¦ ¦ ¦ ¦ ¦ адресу из HL ¦
¦ CALL addr ¦ CD ¦ 3 ¦ 17 ¦ Безуслов вызов п/прогр.¦
¦ Ccc addr ¦ 11CCC100 ¦ 3 ¦ 11/17 ¦ Условный вызов п/прогр ¦
¦ RET ¦ C9 ¦ 1 ¦ 10 ¦ Безусл. возврат из п/п ¦
¦ Rcc ¦ 11CCC000 ¦ 1 ¦ 5/11 ¦ Условный возврат из п/п¦
¦ RST n ¦ 11NNN111 ¦ 1 ¦ 11 ¦ Повторный запуск МП с ¦
¦ ¦ ¦ ¦ ¦ адреса NNN*8 ¦
¦ EI ¦ FB ¦ 1 ¦ 4 ¦ Разрешение прерывания ¦
¦ DI ¦ F3 ¦ 1 ¦ 4 ¦ Запрещение прерывания ¦
¦ HLT ¦ 76 ¦ 1 ¦ 7 ¦ Останов ¦
¦ NOP ¦ 00 ¦ 1 ¦ 4 ¦ Нет операции ¦
¦ IN port ¦ DB ¦ 2 ¦ 10 ¦ Ввод данных из порта в A
¦ OUT port ¦ D3 ¦ 2 ¦ 10 ¦ Вывод данных из A в порт
+--------------------------------------------------------------------
Список арифметических команд Таблица 3
---------------------------- =========
+----------------------------------------------------------------------+
¦ Мнемоника ¦ Код ¦ Приз- ¦Длина ¦Число ¦ Выполняемая ¦
¦ ¦ ¦ наки ¦команды¦тактов¦ функция ¦
+-----------+--------+-------+------+------+------------------------¦
¦ INR R ¦00DDD100¦ SZAСP-¦ 1 ¦ 5 ¦ Инкремент регистра R ¦
¦ INR M ¦ 34 ¦ SZAСP-¦ 1 ¦ 10 ¦ Инкремент памяти M ¦
¦ INX RP ¦00RP0011¦ ------¦ 1 ¦ 5 ¦ Инкремент регистровой ¦
¦ ¦ ¦ ¦ ¦ ¦ пары RP ¦
¦ DCR R ¦00DDD101¦ SZAСP-¦ 1 ¦ 5 ¦ Декремент регистра R ¦
¦ DCR M ¦ 25 ¦ SZAСP-¦ 1 ¦ 10 ¦ Декремент памяти M ¦
¦ DCX RP ¦00RP1011¦ ------¦ 1 ¦ 5 ¦ Декремент регистровой ¦
¦ ¦ ¦ ¦ ¦ ¦ пары RP ¦
¦ ADD R ¦10000SSS¦ SZAСPC¦ 1 ¦ 4 ¦ Сложение A и R ¦
¦ ADD M ¦ 86 ¦ SZAСPC¦ 1 ¦ 7 ¦ Сложение A и M ¦
¦ ADI data8¦ C6 ¦ SZAСPC¦ 2 ¦ 7 ¦ Сложение A и непосредст-
¦ ¦ ¦ ¦ ¦ ¦ венных данных ¦
¦ ADC R ¦10001SSS¦ SZAСPC¦ 1 ¦ 4 ¦ Слож. A и R с переносом¦
¦ ADC M ¦ 8E ¦ SZAСPC¦ 1 ¦ 7 ¦ Слож. A и M с переносом¦
¦ ACI data8¦ CE ¦ SZAСPС¦ 2 ¦ 7 ¦ Слож. A и непосредст- ¦
¦ ¦ ¦ ¦ ¦ ¦ венных данных с переносом¦
¦ SUB R ¦10010SSS¦ SZAСPС¦ 1 ¦ 4 ¦ Вычитание R из A ¦
¦ SUB M ¦ 96 ¦ SZAСPC¦ 1 ¦ 7 ¦ Вычитание M из A ¦
¦ SUI data8¦ D6 ¦ SZAСPС¦ 2 ¦ 7 ¦ Вычитание
¦ ¦ ¦ ¦ ¦ ¦ непосредств.данных из A¦
¦ SBB R ¦10011SSS¦ SZAСPC¦ 1 ¦ 4 ¦ Вычитание R из A с заемом
¦ SBB M ¦ 9E ¦ SZAСPC¦ 1 ¦ 7 ¦ Вычитание M из A с заемом
¦ SBI data8¦ DE ¦ SZAСPC¦ 2 ¦ 7 ¦ Вычит. непосредственных
¦ ¦ ¦ ¦ ¦ ¦ данных из A с заемом
¦ DAD RP ¦00RP1001¦ ----C ¦ 1 ¦ 10 ¦ Сложение регистровых пар
¦ ¦ ¦ ¦ ¦ ¦ HL и RP
¦ ANA R ¦10100SSS¦ SZAСP0¦ 1 ¦ 4 ¦ Логическое И A и R
¦ ANA M ¦ A6 ¦ SZAСP0¦ 1 ¦ 7 ¦ Логическое И A и M
¦ ANI data8¦ E6 ¦ SZAСP0¦ 2 ¦ 7 ¦ Логическ.И A и непосред-
¦ ¦ ¦ ¦ ¦ ¦ ственных данных
¦ XRA R ¦10101SSS¦ SZAСP0¦ 1 ¦ 4 ¦ Исключающее ИЛИ A и R
¦ XRA M ¦ AE ¦ SZAСP0¦ 1 ¦ 7 ¦ Исключающее ИЛИ A и M
¦ XRI data8¦ EE ¦ SZAСP0¦ 2 ¦ 7 ¦ Исключающее ИЛИ A и непос
¦ ¦ ¦ ¦ ¦ ¦ редственных данных
¦ ORA R ¦10110SSS¦ SZAСP0¦ 1 ¦ 4 ¦ Логическое ИЛИ A и R
¦ ORA M ¦ B6 ¦ SZAСP0¦ 1 ¦ 7 ¦ Логическое ИЛИ A и M
¦ ORI data8¦ F6 ¦ SZAСP0¦ 2 ¦ 7 ¦ Логическое ИЛИ A и непос
¦ ¦ ¦ ¦ ¦ ¦ редственных данных
¦ CMP R ¦10111SSS¦ SZ0PС ¦ 1 ¦ 4 ¦ Сравнение A и R (A-R)
¦ CMP M ¦ BE ¦ SZ0PС ¦ 1 ¦ 7 ¦ Сравнение A и M (A-M)
¦ CPI data8¦ FE ¦ SZ0PС ¦ 2 ¦ 7 ¦ Сравнение A и непосредст
¦ ¦ ¦ ¦ ¦ ¦ венных данных (A-data8)
¦ RLC ¦ 07 ¦ ----C ¦ 1 ¦ 4 ¦ Циклич. сдвиг A влево
¦ RRC ¦ 0F ¦ ----C ¦ 1 ¦ 4 ¦ Циклич. сдвиг A вправо
¦ RAL ¦ 17 ¦ ----C ¦ 1 ¦ 4 ¦ Циклич. сдвиг A влево
¦ ¦ ¦ ¦ ¦ ¦ через бит C
¦ RAR ¦ 1F ¦ ----C ¦ 1 ¦ 4 ¦ Циклич. сдвиг A вправо
¦ ¦ ¦ ¦ ¦ ¦ через бит C
¦ DAA ¦ 27 ¦ SZAPC ¦ 1 ¦ 4 ¦ Десятичная коррекция A
¦ CMA ¦ 2F ¦ ----- ¦ 1 ¦ 4 ¦ Инвертирование A
¦ STC ¦ 37 ¦ ----1 ¦ 1 ¦ 4 ¦ Установка бита C
¦ CMC ¦ 3F ¦ ----C ¦ 1 ¦ 4 ¦ Инвертирование бита C
+-------------------------------------------------------------------
Подсчитаем количество команд в нашей программе и исходя из таблиц количество тактов затрачиваемых на каждую из команд:
mov 5 тактов
CKL:
in (2 шт) 10 тактов
mov (2 шт) 10 тактов
mul (2 шт) 144 такта
add 4 такта
xchg 4 такта
За время выполнения одного полного цикла вычислений данный кусок кода выполняется один раз и на него тратиться 172 такта.
M1:
xor (2 шт) 8 такта
mov 5 тактов
mul 77 тактов
cmp 4 такта
jna 10 тактов
За время выполнения одного полного цикла вычислений данный кусок кода выполняется примерно 8 раз и на него тратиться 832 такта.
M2:
shr 4 такта
jnz 10 тактов
xchg 4 такта
mov 5 тактов
out 10 тактов
jmp 10 тактов
За время выполнения одного полного цикла вычислений данный кусок кода выполняется один раз и на него тратиться 43 такта.
На время выполнения одного полного цикла вычислений тратиться 1047 тактов и составляет 209,4 мкс при частоте процессора 5 МГц.
|