ЛАБОРАТОРНОЕ ЗАНЯТИЕ №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.