Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная МПТ 5.doc
Скачиваний:
1
Добавлен:
14.09.2019
Размер:
80.9 Кб
Скачать

ЛАБОРАТОРНОЕ ЗАНЯТИЕ №5

Использование подпрограмм и организация циклов.

1 Цель работы

- закрепление теоретических знаний о системе команд i8086;

- привитие навыков работы с вычислительной техникой на базе МП;

- исследование возможностей МП при выполнении команд переходов и организации подпрограмм.

2 Перечень используемого оборудования

2.1 Программа EMU8086.

2.2 ПК.

3 Краткие теоретические сведения

Нарушение последовательного выполнения команд программы, когда адрес следующей выполняемой команды автоматически заносится в программный счетчик и сегментный регистр выполняется при помощи команд условных и безусловных переходов.

Мнемоника

Команды

Описание команды

Алгоритм команды

Количество байт

Количество тактов

JMP target16

Внутрисегментный безусловный переход по непосредственному адресу target.

IP  IP+disp16

3

15

JMP NEAR

target8

IP  IP+disp16

2

15

JMP reg

IP  IP+[reg]

2

2

JMP mem

IP  IP+[mem]

2-41)

18+EA

JMP FAR target

Межсегментный безусловный переход по непосредственному адресу target.

IP  offset target

CS  seg target

5

15

JMP FAR mem

IP  [mem]

CS  [mem+2]

2-41)

24+EA

JCX target

Переход, если CX = 0

2

18/64)

LOOP target

Цикл: CX  CX – 1 и переход, если CX  0

2

16/44)

LOOPE

(LOOPZ)

target

Цикл: CX  CX – 1 и переход, если CX  0 и ZF = 1

2

18/64)

LOOPNE

(LOOPNZ)

target

Цикл: CX  CX – 1 и переход, если CX  0 и ZF = 0

2

19/54)

JA (JNBE)

target

Переход, если первый беззнаковый операнд больше, чем второй. (CF = ZF = 0)

2

16/44)

JAE (JNB)

target

Переход, если первое беззнаковое число не меньше, чем второе. (CF = 0)

2

16/44)

JB (JC)

target

Переход, если первое беззнаковое число меньше, чем второе. (CF = 1)

2

16/44)

JE (JZ)

target

Переход, если числа равны (ZF = 1)

2

16/44)

JG (JNLE)

target

Переход, если первое знаковое число больше, чем второе. (SF = ZF&OF)

2

16/44)

JGE (JNL)

target

Переход, если первое знаковое число больше или равно второму. (SF = OF)

2

16/44)

JL (JNGE)

target

Переход, если первое знаковое число меньше, чем второе. (SF  OF)

2

16/44)

JLE (JNG)

target

Переход, если первое знаковое число меньше или равно второму. (SF  OF или ZF = 0)

2

16/44)

JNC (JAE/JNB)

target

Переход, если нет переноса (CF = 0)

2

16/44)

JNE (JNZ)

target

Переход, если числа не равны (ZF = 0)

2

16/44)

JNO target

Переход, если нет переполнения (OF = 0)

2

16/44)

JNP (JPO)

target

Переход, если результат нечетный (PF = 0)

2

16/44)

JNS target

Переход при положительном результате (SF = 0)

2

16/44)

JO target

Переход, если есть переполнение (OF = 1)

2

16/44)

JP (JPE)

target

Переход, если результат четный (PF = 1)

2

16/44)

JS target

Переход при отрицательном результате (SF = 0)

2

16/44)

CALL NEAR

target

Внутрисегментный вызов процедуры

SP  SP – 2

[SS:SP]  IP

IP  target

3

19

CALL NEAR

reg

IP  [reg]

2

16

CALL NEAR

mem

IP  [mem]

2-41)

21+EA

CALL FAR

target

Межсегментный вызов процедуры

SP  SP – 2

[SS:SP]  CS

SP  SP – 2

[SS:SP]  IP

CS, IP  target

5

28

CALL FAR

mem

IP  [mem]

CS  [mem+2]

2-41)

37+EA

RET

Возврат из внутрисегментной процедуры. Необязательный параметр n задает коррекцию указателя стека.

IP  [SS:SP]

SP  SP + 2

1

8

RET NEAR

RET (n)

SP  SP + n

3

12

RET NEAR (n)

RET FAR

Возврат из межсегментной процедуры. Необязательный параметр n задает коррекцию указателя стека.

IP  [SS:SP]

SP  SP + 2

CS  [SS:SP]

RET FAR (n)

SP  SP + n

Обозначения:

reg – 8/16-разрядный РОН; mem – 8/16-разрядная ячейка памяти;

1) Команда занимает 2 байта, если при адресации ячейки памяти не используется смещение, 3 - если используется 8-разрядное смещение и 4 – при 16-разрядном смещении.

2) Команда занимает 3 байта при адресации ячейки памяти не используется смещение, 4 - если используется 8-разрядное смещение и 5 – при 16-разрядном смещении.

3) Команда занимает 4 байта при адресации ячейки памяти не используется смещение, 5 - если используется 8-разр\ядное смещение и 6 – при 16-разрядном смещении.

4) m/n при выполнении перехода команда выполняется за m тактов, в противном случае – за n тактов.

Наиболее распространенной областью использования циклов является разработка программ временных задержек. Такую программу можно реализовать при помощи пустого цикла, однако в этом случае может потребоваться довольно большое время для подсчета точного времени задержки, а для его увеличения необходимо использовать несколько регистров МП. Однако, если микропроцессорная система построена на базе ПК, то можно использовать встроенную в любой компьютер микросхему таймера 8253 (8254), используемую для синхронизации системных часов. Показания встроенного в эту микросхему счетчика хранятся в специальной области памяти по адресу 0040:006C (4 байта последовательно) и обновляются приблизительно 18.2 раза в секунду. Кроме того, в DOS есть системное прерывание 1AH (функция 0) для получения значения этого счетчика. Прерывание возвращает два младших байта в регистр DX, а два старших – в CX.