Время выполнения команд
В этом приложении приведено время выполнения команд и прерываний в машинных тактах для микропроцессора 8086 (КР1810ВМ86). Для микропроцессора 8088 время выполнения многих команд будет больше, поскольку ему требуется больше обращений к памяти.
Во многих командах общее время выполнения складывается из некоторого “базового” количества тактов плюс количества, необходимого для вычисления эффективного адреса.
| Время вычисления эффективного адреса | |||||||||||||
| Поле R/M | Mod=00 | Mod=01 | Mod=10 | ||||||||||
| адресация | такты | адресация | такты | адресация | такты | ||||||||
| 000 | BX+SI | 7 | BX+SI+disp8 | 11 | BX+SI+disp16 | BX+SI+disp8 | |||||||
| 001 | BX+DI | 8 | BX+DI+disp8 | 12 | BX+DI+disp16 | BX+DI+disp8 | |||||||
| 010 | BP+SI | 8 | BP+SI+disp8 | 12 | BP+SI+disp16 | BP+SI+disp8 | |||||||
| 011 | BP+DI | 7 | BP+DI+disp8 | 11 | BP+DI+disp16 | BP+DI+disp8 | |||||||
| 100 | SI | 5 | SI+disp8 | 9 | SI+disp16 | SI+disp8 | |||||||
| 101 | DI | 5 | DI+disp8 | 9 | DI+disp16 | DI+disp8 | |||||||
| 110 | disp16 | 6 | BP+disp8 | 9 | BP+disp16 | BP+disp8 | |||||||
| 111 | BX | 5 | BX+disp8 | 9 | BX+disp16 | BX+disp8 |
| Время выполнения команд | |||
| Команда | Такты | ||
| AAA | 4 | ||
| AAD | 60 | ||
| AAS | 4 | ||
| AAM | 83 | ||
| ADC r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| ADD r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| AND r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| CALL rel16 | 19 | ||
| r16 | 16 | ||
| m16 | 21+EA | ||
| ptr16:16 | 28 | ||
| m16:16 | 37+EA | ||
| CBW | 2 | ||
| CLC | 2 | ||
| CLD | 2 | ||
| CLI | 2 | ||
| CMC | 2 | ||
| CMP r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 9+EA | ||
| r, imm | 4 | ||
| m, imm | 10+EA | ||
| CMPS | 22 | ||
| REP CMPS | 9+22*N | ||
| CWD | 5 | ||
| DAA | 4 | ||
| DAS | 4 | ||
| DEC r16 | 2 | ||
| r8 | 3 | ||
| m | 15+EA | ||
| DIV r8 | 80–90 | ||
| r16 | 144–162 | ||
| m8 | (86–96)+EA | ||
| m16 | (150–168)+EA | ||
| ESC op, r | 2 | ||
| op, m | 8+EA | ||
| HLT | 2 | ||
| IDIV r8 | 101–112 | ||
| r16 | 165–184 | ||
| m8 | (107–118)+EA | ||
| m16 | (171–190)+EA | ||
| IMUL r8 | 80–98 | ||
| r16 | 128–154 | ||
| m8 | (86–104)+EA | ||
| m16 | (134–160)+EA | ||
| IN acc, imm8 | 10 | ||
| acc, DX | 8 | ||
| INC r16 | 2 | ||
| r8 | 3 | ||
| m | 15+EA | ||
| INT 3 | 51 | ||
| imm8 | 52 | ||
| INTO | 4/53 | ||
| IRET | 24 | ||
| Jcc rel8 | 4/16 | ||
| JCXZ rel8 | 6/18 | ||
| JMP rel8/16 | 15 | ||
| r16 | 11 | ||
| m16 | 18+EA | ||
| ptr16:16 | 15 | ||
| m16:16 | 24+EA | ||
| LAHF | 4 | ||
| LDS r16, m16:16 | 16+EA | ||
| LEA r16, m | 2+EA | ||
| LES r16, m16:16 | 16+EA | ||
| LODS | 12 | ||
| LOOP rel8 | 5/17 | ||
| LOOPE rel8
LOOPZ rel8 | 6/18 | ||
| LOOPNE rel8
LOOPNZ rel8 | 5/19 | ||
| MOV m, acc | 10 | ||
| acc, m | 10 | ||
| sr, r16 | 2 | ||
| sr, m16 | 8+EA | ||
| r16, sr | 2 | ||
| m16, sr | 9+EA | ||
| r, r | 2 | ||
| r, m | 8+EA | ||
| m, r | 9+EA | ||
| r, imm | 4 | ||
| m, imm | 10+EA | ||
| MOVS | 18 | ||
| REP MOVS | 9+17*N | ||
| MUL r8 | 70–77 | ||
| r16 | 118–133 | ||
| m8 | (76–83)+EA | ||
| m16 | (124–139)+EA | ||
| NEG r | 3 | ||
| m | 16+EA | ||
| NOP | 3 | ||
| NOT r | 3 | ||
| m | 16+EA | ||
| OR r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| OUT acc, imm8 | 10 | ||
| acc, DX | 8 | ||
| POP r16 | 8 | ||
| m16 | 17+EA | ||
| sr | 8 | ||
| POPF | 8 | ||
| PUSH r16 | 11 | ||
| m16 | 16+EA | ||
| sr | 10 | ||
| PUSHF | 10 | ||
| сдвиг r, 1 | 2 | ||
| m, 1 | 15+EA | ||
| r, CL | 8+4*N | ||
| m, CL | 20+EA+4*N | ||
| RET (ближний) | 8 | ||
| imm16 (ближний) | 12 | ||
| (дальний) | 17 | ||
| imm16 (дальний) | 18 | ||
| SAHF | 4 | ||
| SBB r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| SCAS | 15 | ||
| REP SCAS | 9+15*N | ||
| STC | 2 | ||
| STD | 2 | ||
| STI | 2 | ||
| STOS | 11 | ||
| REP STOS | 9+10*N | ||
| SUB r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| TEST r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 9+EA | ||
| acc, imm | 4 | ||
| r, imm | 5 | ||
| m, imm | 11+EA | ||
| WAIT | 3+5*N | ||
| XCHG AX, r16 | 3 | ||
| r16, AX | 3 | ||
| r, r | 4 | ||
| r, m | 17+EA | ||
| m, r | 17+EA | ||
| XLAT | 11 | ||
| XOR r, r | 3 | ||
| r, m | 9+EA | ||
| m, r | 16+EA | ||
| r, imm | 4 | ||
| m, imm | 17+EA | ||
| Префиксы команд | |||
| LOCK | 2 | ||
| REP/REPcc | 2 | ||
| замены сегмента | 2 | ||
| Прерывания | |||
| внешние | 61 | ||
| немаскируемые | 50 | ||
| трассировки | 50 |
В таблице EA – время вычисления эффективного адреса; N – число повторений операции.
[1]
Позднее, при разработке микропроцессора 80286, инженеры фирмы Intel допустили ошибку, из-за чего этот перенос учитывался. Ошибка не была вовремя замечена, и в персональные компьютеры пришлось вводить дополнительные схемы, позволяющие либо блокировать 20-ю линию адреса (чтобы сохранялась совместимость с процессором 8086), либо разрешать её нормальное функционирование (для использования областей памяти с физическими адресами свыше FFFFF16). Эта ошибка из соображений совместимости повторяется и во всех последующих процессорах.
[2]
Примером может служить многозадачная многопользовательская операционная система реального времени RSX-11, способная эффективно работать на ЭВМ с объёмом памяти 128 Кбайт, обеспечивая при этом истинную многозадачность, защиту памяти и предоставляя пользователю куда более широкий набор функций, чем MS DOS, хотя последняя является однозадачной и при этом намного более требовательна к объёму памяти. Начиная с микропроцессора 80386, фирма Intel значительно улучшила эффективность системы команд, но так и не смогла “подтянуть” её даже до уровня PDP-11, не говоря уже о 32-разрядной супермини-ЭВМ VAX-11.
[3]
Нельзя смешивать короткие и длинные переходы с ближними и дальними, т.е. с внутрисегментными и межсегментными.
[4]
В вычислительных системах других архитектур сегментация памяти не используется, и программист работает с логическими (виртуальными) адресами, состоящими не из двух, а из одного-единственного компонента. В таких вычислительных системах для обозначения величины, используемой при относительной адресации, почти всегда используется термин “смещение”, поскольку для них вызывать путаницы он не может.
[5]
Не следует путать номера векторов прерываний, т.е. местоположение адреса программы-обработчика прерывания в таблице векторов прерываний, с номером аппаратного прерывания, т.е. номером линии запроса прерывания, поступающего контроллеру прерываний (номером IRQ).Соответствие между номерами линий прерываний (IRQ) и номерами векторов задаётся при программировании контроллера прерываний и, вообще говоря, к архитектуре микропроцессора прямого отношения не имеет.