Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_MPT.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
558.08 Кб
Скачать

Лабораторная работа № 2

Тема: «Команды ветвления»

Цель работы: Научиться разрабатывать программы разветвлённых структур, а также использовать подпрограммы при разработке разветвлённых структур. Ознакомиться со стековой организацией памяти и научиться работать со стеком.

2.1. Общие сведения

В вышерассмотренных лабораторных работах программные модули имеют линейную структуру, тогда как в реальной жизни, при разработке программ управления, приходится создавать программы разветвлённых структур, когда в зависимости от состояния управляемого объекта и других условий, процессор должен выполнять различные действия, что программно реализуется наличием различных путей(ветвей) выполнения программы.

Часто для создания разветвлённых программных структур используются команды безусловного и условного переходов. В командах используется прямая адресация, т.е. адрес перехода целиком (или его часть) содержится в самой команде передачи управления.

Безусловный переход. Производит передачу управления команде, находящейся в ячейке с адресом на которую указывает команда перехода. В зависимости от разрядности адреса перехода (дальнобойности команды) применяются три типа команд безусловного перехода:

1) Длинный переход. Переход по всему адресному пространству ПП.

В команде содержится полный 16-битный адрес перехода (ad16). Трехбайтные команды длинного перехода содержат в мнемокоде букву L (Long). Всего существует две такие команды: LJMP — длинный переход и LCALL - длинный вызов подпрограммы. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающее меньше места в памяти.

LJMP ad16 ; (PC) ← ad16 (переход на ad16)

где РС – счётчик команд, в котором хранится адрес следующей команды программы, которая будет выполняться процессором, ad16 - полный 16-битный адрес перехода.

2) Абсолютный переход. Переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad11). Команды абсолютного перехода имеют формат 2 байта. Начальная буква мнемокода — A(Absolute). При выполнении команды в вычисленном адресе следующей по порядку

команды ((РС)= (PC) + 2) 11 младших бит заменяются на ad11 из тела команды абсолютного перехода.

AJMP ad11 ; (PC) ← (PC) + 2, (PC0-10) ← ad11 (переход на ad11)

где ad11- 11 младших перехода,извлекаемых из тела команды абсолютного перехода.

3) Относительный переход. Короткий относительный переход позволяет передать управление в пределах — 128 - +127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Существует одна команда безусловного короткого перехода SJMP (Short). Все команды условного перехода используют относительный переход. Относительный адрес перехода (rel)

содержится во втором байте команды.

SJMP rel ; (PC) ← (PC) + 2, (PC) ← (PC) + rel (переход на rel)

где rel - rороткий относительный адрес перехода в пределах — 128 - +127 байт.

П ри программировании в среде Franclin Software достаточно просто указать команду JMP и метку перехода, при трансляции программы будет подставлена команда оптимальная по разрядности адреса перехода.

Условные переходы. Развитая система условных переходов предоставляет возможность осуществлять ветвление по следующим условиям:

- аккумулятор содержит нуль (JZ);

JZ rel ;если А=0, то

РС = РС + rel

- содержимое аккумулятора не равно нулю (JNZ);

JNZ rel ;если А≠0, то

РС = РС + rel

- перенос равен единице (JC);

JC rel ;если C=1, то

РС = РС + rel

- перенос равен нулю (JNC);

JNC rel ;если C=0, то

РС = РС + rel

- адресуемый бит равен единице (JB);

JB bit, rel ;если bit = 1,

то РС = РС + rel

JBC bit, rel ;если bit = 1,

то РС = РС + rel и bit = 0

в последней команде добавляется ещё действие сброса адресуемого бита в 0

- адресуемый бит равен нулю (JNB).

JNB bit, rel ;если bit = 0,

то РС = РС + rel

Для организации программных циклов удобно пользоваться командой DJNZ. Формат этих команд:

DJNZ Rn, rel ; Rn-1 Rn, если Rn ≠0, то переход на rel;

DJNZ ad, rel ; (ad)-1 (ad), если (ad) ≠ 0, то переход на rel;

Команда CJNE используется для сравнения двух операндов и переход если они не равны

Формат команд сравнения:

CJNE A, ad, rel; если (A)≠(ad), то переход на rel;

CJNE A, #d, rel; если (A)≠ #d, то переход на rel;

CJNE Rn, #d, rel; если (Rn)≠ #d, то переход на rel;

CJNE @Ri, #d, rel; если ((Ri))≠ #d, то переход на rel.

Например, команда CJNE эффективно используется в процедурах ожидания какого-либо события.

WAIT: CJNE A, P0, WAIT

Команда будет выполняться до тех пор, пока на линиях порта 0 не установи информация, совпадающая с содержимым аккумулятора.

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

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