Поиск по сайту:
В табл. П.1.1_1 использованы следующие обозначения: r – общий регистр; sr – сегментный регистр; m – адрес ячейки памяти, который указывается в мнемокоде в соответствии с используемым способом адресации; Acc – аккумулятор AH илиAL; port – адрес 8-pазpядного порта ввода-вывода; type – тип (вектор) прерывания; disp 8/16 – смещение в формате команды (один или два байта); D8/16 – одно или двухбайтная константа; sbr – имя подпрограммы; diff – разница между адресом перехода и содержимым указателя команд IP; label – метка, к которой осуществляется переход; opcode – команда для сопроцессора. Постбайт (второй байт B2 в табл. П.1.1_1.) состоит из трех полей: md – режим, reg – регистр, r/m – регистр/память.
Таблица П.1.1_1
Машинные коды команд базового процессора i8086
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
1. ASCII- коррекция для сложе- ния AAA |
00110111 |
|
|
|
2. ASCII-коррекция для деления |
|
|
|
|
AAD |
11010101 |
00001010 |
|
|
3. ASCII-коррекция для умножения AAM |
11010100 |
00001010 |
|
|
4. ASCII-коррекция для вычитания AAS |
00111111 |
|
|
|
Продолжение табл. П.1.1_1
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
5. Сложение с учётом переноса |
|
|
|
|
ADC r, r/m |
0001001w |
md reg r/m |
(disp8/16) |
r¬r+ r/m+ CF |
r/m, r |
0001000w |
md reg r/m |
(disp8/16) |
r/m¬r+ r/m+ CF |
r/m, d |
1000000w |
md 010r/m |
(disp8/16)d8/16 |
r/m¬r+ r/m+ CF |
r16/m16,d8 |
10000011 |
md 010r/m |
data L |
r/m¬r/m+ d+ CF |
acc, d |
0001010w |
data L |
(data H) |
acc¬acc +d+ CF |
6. Сложение |
|
|
|
|
ADD r, r/m |
0000001w |
md reg r/m |
(disp8/16) |
r¬r+ r/m |
r/m, r |
0000000w |
md reg r/m |
(disp8/16) |
r/m¬r +r/m |
r/m, d |
1000000w |
md 000r/m |
(disp8/16)d8/16 |
r/m¬r/m +d |
r16/d16,d8 |
10000011 |
md000r/m |
data L |
r/m¬r/m +d |
acc, d |
0000010w |
data L |
(data H) |
acc¬acc +d |
7. Логическое И |
|
|
|
|
AND r, r/m |
0010001w |
md reg r/m |
(disp8/16) |
r¬r Ù r/m |
r/m, r |
0010000w |
md reg r/m |
(disp8/16) |
r/m¬r Ù r/m |
r/m, d |
1000000w |
md 100 r/m |
data L (data H) |
r/m¬r/m Ù d |
acc, d |
0010010w |
data L |
(data H) |
acc ¬acc Ùd |
8. Вызов подпрограммы |
|
|
|
|
CALL near sbr |
11101000 |
diff L |
diff H |
IP¬IP+ diff |
near r16/m16 |
11111111 |
md 010 r/m |
(disp8/16) |
IP¬IP+ r/m |
far sbr |
10011010 |
ip-L |
ip-H, cs-L, cs-H |
|
far m32 |
11111111 |
md 011 r/m |
(disp8/16) |
CS,IP¬m32 |
9. Преобразование байта в слово |
|
|
|
|
CBW |
10011000 |
|
|
|
10. Сброс флага переноса CLC |
11111000 |
|
|
CF¬0 |
11. Сброс флага направления |
|
|
|
|
CLD |
11111100 |
|
|
DF¬0 |
12. Сброс флага прерывания |
|
|
|
|
CLI |
11111010 |
|
|
IF¬0 |
13. Инверсия флага переноса |
|
|
|
|
CMC |
11110101 |
|
|
CF = !CF |
14. Сравнение |
|
|
|
|
CMP r,r/m |
0011101w |
md reg r/m |
(disp8/16) |
r-r/m |
r/m,r |
0011100w |
md reg r/m |
(disp8/16) |
r/m-r |
r/m,d |
1000000w |
md 111 r/m |
(disp8/16)d8/16 |
r/m-d |
r16/m16,d8 |
10000011 |
md 111 r/m |
data L |
r/m-d |
acc,d |
0011110w |
data L |
(data H) |
acc-d |
15. Сравнение строк |
|
|
|
|
CMPS dst,src |
1010011w |
|
|
[ds:si]-[es:di] |
16. Преобразование слова в двойное слово CWD |
10011001 |
|
|
|
17. Десятичная коррекция сложе-ния DAA |
00100111 |
|
|
|
18. Десятичная коррекция вычи- тания DAS |
00101111 |
|
|
|
Продолжение табл. П.1.1_1
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
19. Декремент |
|
|
|
|
DEC r/m |
1111111w |
md 001 r/m |
(disp8/16) |
r/m¬r/m-1 |
r |
01001 reg |
|
|
r¬r-1 |
20. Деление чисел без знака |
|
|
|
|
DIV r/m |
1111011w |
md 110 r/m |
(disp8/16) |
|
21. Переключение на сопроцессор EXC OPCODE, r/m |
11011xxx |
md 001 r/m |
(disp8/16) |
|
22. Останов HLT |
11110100 |
|
|
|
23. Деление чисел со знаком |
|
|
|
|
IDIV r/m |
1111011w |
md 111 r/m |
(disp8/16) |
|
24. Умножение чисел со знаком |
|
|
|
|
IMUL r/m |
1111011w |
md 101 r/m |
(disp8/16) |
|
25. Ввод из порта |
|
|
|
|
Прямой IN acc,port |
1110010w |
port8 |
|
|
Косвенный IN acc,dx |
1110110w |
|
|
|
26. Инкремент |
|
|
|
|
INC r/m |
1111111w |
md 000 r/m |
(disp8/16) |
r/m¬r/m+1 |
r |
01000 reg |
|
|
r¬r+1 |
27. Прерывание заданного типа |
|
|
|
|
INT type |
11001101 |
type |
|
|
Прерывание по переполнению INTO |
11001110 |
|
|
|
Прерывание типа 3 (INT3) |
11001100 |
|
|
|
28. Возврат из прерывания |
|
|
|
|
IRET |
11001111 |
|
|
|
29. Переход, если выше |
|
|
|
CFÚZF=0 |
JA label |
01110111 |
diff L |
|
IP¬IP+diff L |
30. Переход, если выше или равно JAE ladel |
01110011 |
diff L |
|
CF=0 IP¬IP+diffL L |
31. Переход, если ниже |
|
|
|
CF=1 |
JB ladel |
01110010 |
diff L |
|
IP¬IP+diff L |
32. Переход, если ниже или равно |
|
|
|
CFÚZF=1 |
JBE label |
01110110 |
diff L |
|
IP¬IP+diff L |
33. Переход, если есть перенос |
|
|
|
CF=1 |
JC label |
01110010 |
diff L |
|
IP¬IP+diff L |
34. Переход, если СX=0 |
|
|
|
|
JCXZ label |
11100011 |
diff L |
|
IP¬IP+diff L |
35. Переход, если равно |
|
|
|
ZF=1 |
JE/JZ label |
01110100 |
diff L |
|
IP¬IP+diff L |
36. Переход, если больше |
|
|
|
(SFÅOF)ÚZF=0 |
JG label |
01111111 |
diff L |
|
IP¬IP+diff L |
|
|
|
|
|
37. Переход, если больше или равно JGE label |
01111101 |
diff L |
|
SFÅOF=0 IP¬IP+diff L |
38. Переход, если меньше |
|
|
|
SFÅOF=1 |
JL label |
01111100 |
diff L |
|
IP¬IP+diff L |
Продолжение табл. П.1.1_1
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
39. Переход, если меньше или = |
|
|
|
(SFÅOF)ÚZF=1 |
JLE label |
01111110 |
diff L |
|
IP¬IP+diff L |
40. Безусловный переход |
|
|
|
|
JMP short label |
11101011 |
diff L |
|
IP¬IP+diff L |
near label |
11101001 |
diff L |
diff H |
IP¬IP+diff 16 |
near r16/m16 |
11111111 |
md 100 r/m |
(disp8/16) |
IP¬IP+r/m |
far label |
11101010 |
ip-l |
ip-h, cs-l, cs-h |
|
far m32 |
11111111 |
md 101 r/m |
(disp8/16) |
CS,IP¬m32 |
41. Переход, если нет переноса |
|
|
|
CF=0 |
JNC label |
01110011 |
diff L |
|
IP¬IP+diff L |
42. Переход, если не равно |
|
|
|
ZF=0 |
JNE/JNZ |
01110101 |
diff L |
|
IP¬IP+diff L |
43. Переход, если нет перепол- нения JNO label |
01111001 |
diff L |
|
OF=0 IP¬IP+diff L |
44. Переход, если нет паритета |
|
|
|
PF=0 |
JNP label |
01111011 |
diff L |
|
IP¬IP+diff L |
45. Переход, если SF=0 |
|
|
|
|
JNS label |
01111001 |
diff L |
|
IP¬IP+diff L |
46. Переход, если есть перепол- нение JO label |
01110000 |
diff L |
|
OF=1 IP¬IP+diff L |
47. Переход, если есть паритет |
|
|
|
PF=1 |
JP label |
01111010 |
diff L |
|
IP¬IP+diff L |
48. Переход, если паритет нечёт- ный JPO label |
01111011 |
diff L |
|
PF=0 IP¬IP+diff L |
49. Переход, если SF=1 |
|
|
|
|
JS label |
01111000 |
diff L |
|
IP¬IP + diff L |
50. Загрузка младшего байта FL в регистр AH LAHF |
10011111 |
|
|
AH¬FL |
51. Загрузка указателя адреса |
|
|
|
|
LDS r16, m32 |
11000101 |
md reg r/m |
(disp8/16) |
r,ds¬m32 |
52. Загрузка эффективного адреса |
|
|
|
|
LEA r16,m |
10001101 |
md reg r/m |
(disp8/16) |
r¬EA |
53. Загрузка указателя адреса |
|
|
|
|
LES r16,m32 |
11000100 |
md reg r/m |
(disp8/16) |
r,es¬m32 |
54. Загрузка элемента строки |
|
|
|
|
LODS src |
1010110w |
|
|
acc ¬ [ds:si] |
55. Зациклить LOOP label |
11100010 |
diff L |
|
IP¬IP+diff L |
56. Зациклить, если равно |
|
|
|
(cx≠0)&(zf=1) |
LOOPE/LOOPZ label |
11100001 |
diff L |
|
IP¬IP+diff L |
57. Зациклить если не равно |
|
|
|
(cx≠0)&(zf=0) |
LOOPNE/LOOPNZ label |
11100000 |
diff L |
|
IP¬IP+diff L |
Продолжение табл. П.1.1_1
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
58. Пересылка |
|
|
|
|
MOV r,r/m |
1000101w |
md reg r/m |
(disp8/16) |
r¬r/m |
r/m,r |
1000100w |
md reg r/m |
(disp8/16) |
r/m¬r |
r/m,d |
1100011w |
md 000r/m |
(disp8/16) d8/d16 |
r/m¬d |
r,d |
1011w reg |
data L |
(data H) |
r¬d |
acc,m |
1010000w |
disp L |
disp H |
acc¬m |
m,acc |
1010001w |
disp L |
disp H |
m¬acc |
sr,r/m |
10001110 |
md 0sr r/m |
(disp 8/16) |
sr¬r/m |
r/m, sr |
10001100 |
md 0sr r/m |
(disp 8/16) |
r/m¬sr |
59. Передача элемента строки |
|
|
|
|
MOVS dst,src |
1010010w |
|
|
[es:di]¬[ds:si] |
60. Умножение чисел без знака |
|
|
|
|
MUL r/m |
1111011w |
md 100 r/m |
(disp 8/16) |
|
61. Изменение знака числа |
|
|
|
|
NEG r/m |
1111011w |
md 011 r/m |
(disp 8/16) |
r/m ¬ 0-r/m |
62. Пустая операция NOP |
10010000 |
|
|
|
63. Логическое НЕ NOT |
1111011w |
md 010 r/m |
(disp8/16) |
|
64. Логическое ИЛИ |
|
|
|
|
or r,r/m |
0000101w |
md reg r/m |
(disp8/16) |
r¬r Ú r/m |
r/m,r |
0000100w |
md reg r/m |
(disp8/16) |
r/m¬r/m Ú r |
r/m,d |
1000000w |
md 001 r/m |
(disp8/16) d8/16 |
r/m¬r/rm Ú d |
acc,d |
0000110w |
data L |
(data H) |
acc¬acc Ú d |
65. Вывод в порт |
|
|
|
|
Прямой OUT acc,port |
1110011w |
port 8 |
|
|
Косвенный OUT acc,dx |
1110111w |
|
|
|
66. Чтение из стека POP r/m |
10001111 |
md 110 r/m |
(disp8/16) |
|
r |
01011reg |
|
|
|
sr |
000sr111 |
|
|
|
67.Чтение флагов из стека POPF |
10011101 |
|
|
|
|
|
|
|
|
68. Запись в стек PUSH r/m |
11111111 |
md 110 r/m |
(disp8/16) |
|
r |
01010 reg |
|
|
|
sr |
000 sr 110 |
|
|
|
69. Запись регистра флагов в стек |
|
|
|
|
PUSHF |
10011100 |
|
|
|
70. Циклический сдвиг влево через CF RCL r/m,1 |
1101000w |
md 010 r/m |
(disp8/16) |
|
r/m,CL |
1101001w |
md 010 r/m |
(disp8/16) |
|
71.Циклический сдвиг вправо через CF RCR r/m,1 |
1101000w |
md 011 r/m |
(disp8/16) |
|
r/m,CL |
1101001w |
md 011 r/m |
(disp8/16) |
|
Продолжение табл. П.1.1_1
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
72. Возврат из подпрограммы |
|
|
|
|
RET (near) |
11000011 |
|
|
ip←(ss:sp) |
RET (far) |
11001011 |
|
|
ip←(ss:sp) cs←(ss:sp+2) |
Возврат с прибавлением числа d |
|
|
|
|
d=2k, где 2к-число параметров RET d (near) |
11000010 |
data L |
data H |
ip←(ss:sp) sp=sp+d |
RET d (far) |
11001010 |
data L |
data H |
ip←(ss:sp) cs←(ss:sp+2) sp=sp+d |
73. Циклический сдвиг влево |
|
|
|
|
ROL r/m,1 |
1101000w |
md 000 r/m |
(disp8/16) |
|
r/m,CL |
1101001w |
md 001 r/m |
(disp8/16) |
|
74. Циклический сдвиг вправо |
|
|
|
|
ROR r/m,1 |
1101000w |
md 001 r/m |
(disp8/16) |
|
r/m,CL |
1101001w |
md 001 r/m |
(disp8/16) |
|
75. Пересылка АН в регистр флагов SAHF |
10011110 |
|
|
|
76. Арифметический (логический) сдвиг влево |
|
|
|
|
SAL/SHL r/m,1 |
1101000w |
md 100 r/m |
(disp8/16) |
|
r/m,CL |
1101001w |
md 100 r/m |
(disp8/16) |
|
77. Арифметический сдвиг впра- во SAR r/m,1 |
1101000w |
md 111 r/m |
(disp8/16) |
|
r/m,CL |
1101001w |
md 111 r/m |
(disp8/16) |
|
78. Вычитание с заёмом |
|
|
|
|
SBB r,r/m |
0001101w |
md reg r/m |
(disp8/16) |
r¬r-r/m-CF |
r/m,r |
0001100w |
md reg r/m |
(disp8/16) |
r/m¬r-r/m-CF |
r/m,d |
1000000w |
md 011 r/m |
(disp8/16) |
r/m¬r/m-d-CF |
r16/m16,d8 |
10000011 |
md 011 r/m |
(disp8/16) |
r/m¬r/m-d-CF |
acc,d |
0001110w |
data L |
data H |
acc¬acc-d-CF |
79. Сканировать элемент строки |
|
|
|
|
SCAS dst |
1010111w |
|
|
acc-[es:di] |
80. Логический сдвиг влево SHL r/m,1 r/m,cl |
1101000w 1101001w |
md 100 r/m md 100 r/m |
(disp 8/16) (disp 8/16) |
|
81. Логический сдвиг вправо |
|
|
|
|
SHR r/m,1 |
1101000w |
md 101 r/m |
(disp8/16) |
|
r/m,cl |
1101001w |
md 101 r/m |
(disp8/16) |
|
82. Установка флага cf STC |
11111001 |
|
|
CF=1 |
83.Установка флага направления |
|
|
|
|
STD |
11111101 |
|
|
DF=1 |
84. Установка флага прерывания |
|
|
|
|
STI |
11111011 |
|
|
IF=1 |
85. Сохранение Aсc в строке |
|
|
|
|
STOS dst |
1010101w |
|
|
[es:di]¬acc |
Окончание табл. П.1.1_1
Команда |
Байты кода команды |
Содержание операции |
||
В1 |
В2 |
В3-В6 |
||
86. Вычитание |
|
|
|
|
SUB r,r/m |
0010101w |
md reg r/m |
(disp8/16) |
r¬r-r/m |
r/m,r |
0010100w |
md reg r/m |
(disp8/16) |
r/m¬r-r/m |
r/m,d |
1000000w |
md 101 r/m |
(disp8/16) d8/16 |
r/m¬r/m-d |
r16/m16,d8 |
10000011 |
md 101 r/m |
data L |
r/m¬r/m-d |
acc,d |
0010110w |
data L |
(data H) |
acc¬acc-d |
87.Проверка (неразрушающее И) |
|
|
|
|
TEST r,r/m |
1000010w |
md reg r/m |
(disp8/16) |
rÙr/m |
r/m,d |
1111011w |
md 000 r/m |
(disp8/16) d8/16 |
r/mÙd |
acc,d |
1010100w |
data L |
(data H) |
accÙd |
88. Ожидание WAIT |
00111011 |
|
|
|
89. Обмен XCHG ax,r |
10010 reg |
|
|
ax«r |
r,ax |
10010 reg |
|
|
r«ax |
r,r/m m,r |
1000011w 1000011w |
md reg r/m md reg r/m |
(disp 8/16) (disp 8/16) |
r«r/m m«r |
90. Табличная трансляция XLAT |
11010111 |
|
|
|
91. Исключающее ИЛИ |
|
|
|
|
xor r,r/m |
0011001w |
md reg r/m |
(disp 8/16) |
r¬r Å r/m |
r/m,r |
0011000w |
md reg r/m |
(disp 8/16) |
r/m¬r Å r/m |
r/m,d |
1000000w |
md 100 r/m |
(disp 8/16) d8/16 |
r/m¬r/m Å d |
acc,d |
0011010w |
data L |
(data H) |
acc¬acc Å d |
Префикс блокировки шины LOCK |
11110000 |
|
|
|
Повторять строковую операцию |
|
|
|
|
REP/REPE/REPZ |
11110011 |
|
|
|
REPNE/REPNZ |
11110010 |
|
|
|
Префикс замены сегмента SEG |
001 sr 110 |
|
|
|