Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler (Уч_пос_Лаб_Ч1).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.43 Mб
Скачать

6.4. Контрольные вопросы

  1. Запишите команду для ассемблирования файла f_1.asm с учётом формирования листинга и возможности использования отладчика TD.

  2. Запишите команду для компоновки файла f_1.obj, разрешающую использование отладчика и запрещающего создание файла отображения.

  3. Как определить физический объект в сегментированной модели памяти, если известны его логические компоненты: "SegmentOffset"?

  4. Запишите директивы языка ассемблера, управляющие сегментами стека, данных и кода в режиме Ideal (Masm).

  5. В чём состоит принципиальная разница между исполняемыми файлами программ типа .exe и .com

  6. Запишите команды, определяющие начало и конец программного кода.

  7. В чём состоит различие между ошибками и предупреждениями, создаваемыми Tasm во время трансляции? Ваши действия при обнаружении ошибки.

  8. После загрузки программы в TD требуется инициализировать сегментный регистр ds на начало сегмента данных. Изложите последовательность ваших действий.

  9. Опишите основные форматы команд 16-разрядных процессоров.

  10. Изложите состав и назначение полей постбайта (байта адресации) в двухоперандной команде процессора.

  11. Укажите на основные отличия в механизме адресации 16- и 32-разрядных процессоров.

  12. Какие из приведённых ниже команд записаны с ошибками и почему? Считайте все идентификаторы переменными, которые определены как слова в сегменте данных:

mov bp,al

mov [op_1+bx+di+12],ax

mov [op_1],[op_2]

mov ax,[op_3+dx]

mov cs,ax

mov [bx+si],2

lea bx,op_2

mov bx,offset [op_2]

Приложения к лабораторной работе № 1 п.1.1. Машинные коды команд базового процессора i8086

В табл. П.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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]