Время выполнения команд
В этом приложении приведено время выполнения команд и прерываний в машинных тактах для микропроцессора 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) и номерами векторов задаётся при программировании контроллера прерываний и, вообще говоря, к архитектуре микропроцессора прямого отношения не имеет.