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

При выполнении линейной программы микропроцессор выполняет команды последовательно одну за другой, а в счетчике команд PC хранится адрес следующей команды. В реальных программах ВСЕГДА существует необходимость применения команд, изменяющих линейный порядок работы. К ним относят команды вызова подпрограмм, команд безусловного и условного перехода. Адрес ячейки, на которой необ­ходимо перейти микропроцессору, задается в команде перехода. При выполнении команды этот адрес загружается в программный счетчик PC. Такая процедура называется передачей управления.

К командам вызова подпрограмм относятся команды CALL (англ.- вызывать) и RЕТ (англ. return - возвращаться). По команде CALL МП загружает в счетчик команд PC число, записанное как адрес перехода. Одновременно, в регистр стека SP записывается содержи­мое младшего PC L и старшего РСН байтов счетчика команд. После выполнения подпрограммы МП считывает команду RET, которая явля­ется обязательной для любой подпрограммы, извлекает из стека содержимое и загружает эти числа в программный счетчик. Продолжа­ется дальнейшее выполнение программы.

Команда безусловного перехода имеет вид JМР adr, где JМР - мнемокод команды безусловного перехода (англ. jump-прыжок);

adr- шестнадцатиразрядный адрес ячейки памяти, куда передается управление программой.

Эта команда занимает три байта памяти: первый байт содержит код команды JMP - СЗ, второй байт - младший байт адреса перехода, третий байт - старший байт адреса перехода.

Команды условных переходов осуществляют передачу управле­ния только при выполнении некоторых условий. Если условие не вы­полняется, то передачи управления не происходит. Проверка условий осуществляется в регистре признаков F после выполнения арифмети­ческих и логических операций над числами, находящимися в регистре А. Если осуществлялась команда пересылки, то установка признаков (флагов) в регистре F не выполняется. Расположение разрядов ре­гистра F приведено на рисунок 8.3 общих сведениях УМК.

Мнемокод команд условного перехода составляется по первой букве вида перехода J (JUMP), С (CALL) или R (RETURN) и мнемокода условий перехода по признакам регистра F:

NZ (not zerou ) - ненулевой результат; код 000

Z (zerou) - нулевой результат; код 001

NС (nocarry) - отсутствие переноса; код 010

С (carry) - перенос; код 011

P (раrity old) - нечетный результат; код 100

РЕ (parity even) - четный результат; код 101

P (plus) - положительное число; код 110

M (мinus) - отрицательное число; код III

Например, нужно осуществить переход, если в результате арифме­тической или логической операции в регистре А получилось четное число. В этом случае, команда условного перехода будет иметь вид:

JPE adr,

где JРЕ - мнемокод команды условного перехода(один байт);

adr - шестнадцатиразрядный адрес перехода (два байта).

Например, нужно вызвать подпрограмму, если в результате ариф­метической или логической операции в аккумуляторе (регистре А) получился нулевой результат. В этом случае команда вызова подпрограммы будет иметь вид:

СZadr

где СZ - мнемокод команды (один байт);

adr - шестнадцатиразрядный адрес, где расположена под­программа (два байта).

Например, нужно вернуться из подпрограммы, если в аккумуляторе получилось отрицательное число. В этом случае команда будет иметь вид RM, ее размер - один байт. Для того, чтобы перейти от мнемоники и двоичному числу, нужно воспользоваться кодом условия перехода, подставив их в соответствующую команду.

Очень часто при выполнении программ необходимы временные задержки. В микропроцессорном комплекте K580 для этого создана микросхема К580ВИ53 - таймер (англ. time - время). В УМК такой микросхемы нет, поэтому временные задержки выполняются програм­мным путем. Для этого создается циклическая подпрограмма, внутри которой происходит сложение или вычитание чисел. Зная время вы­полнения каждой операции и величину записанного числа, можно за­ранее определить время выполнения подпрограммы. Ниже приводится типичная подпрограмма создания временных задержек.

DELAY: LХ1 В, 001F; запись числа, определяющего задержку

LOOP: DСХ В; вычитание на 1 из регистровой пары ВС

MOV А,В; старший байт в аккумулятор

ORA С; сложение старшего и младшего байтов

JNZ LOOP; переход на метку

DСR D; вычитание 1 из регистра D

JNZ DELAY; переход на начало подпрограммы

RET; возврат из подпрограммы

Обычно подпрограмма оформляется в конце основной программы, ее вызов осуществляется командой САLL. После мнемокода этой ко­манды должен стоять адрес ячейки памяти, определяющий начало подпрограммы. Так как при написании программы на языке ассемб­лера адреса ячеек памяти заранее неизвестны, то начало подпрограм­мы помечается меткой. В этом случае вызов подпрограммы будет осу­ществляться командой САLL DELАУ. При записи двухбайтового числа в ячейку памяти вначале записывается младший байт, а затем старший.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: