Поиск по сайту:


«Assembler IBM PC П.1.1. Машинные коды команд базового процессора i8086»

Файл: 4 КБ
Поделиться:

ПРИЛОЖЕНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ № 1

П.1.1. МАШИННЫЕ КОДЫ КОМАНД БАЗОВОГО ПРОЦЕССОРА I8086

В табл. П.1.1_1 использованы следующие обозначения– общий регистр; sr – сегментный регистр; – адрес ячейки памяти, который указывается в мнемокоде в соответствии с используемым способом адресации; Acc – аккумулятор AH илиALport – адрес 8-pазpядного порта ввода-вывода; type – тип (вектор) прерывания; disp 8/16 – смещение в формате команды (один или два байта); D8/16 – одно или двухбайтная константа; sbr – имя подпрограммы; diff – разница между адресом перехода и содержимым указателя команд IPlabel – метка, к которой осуществляется переход; 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