Команды передачи управления


В группу команд передачи управления входят команды безусловного и условного переходов, вызова подпрограмм и возврата из них, краткое описание которых приведено в табл. 1.20. Кроме этого в таблице приведены данные о длине команды в байтах и время ее выполнения в машинных циклах.

Таблица.1.20. Команды передачи управления

Мнемоника команды Код операции Количество байтов в команде Время выполнения, циклы Выполняемые действия
LJMP ad16 00000010 3 2 (PC) ad16
AJMP ad11 a10a9a800001 2 2 (PC) (PC) + 2, (PC0-10) ad11
SJMP rel 10000000 2 2 (PC) (PC) + 2, (PC) (PC) +rel
JMP @A+DPTR 01110011 1 2 (PC) (A) + (DPTR)
JZ rel 01100000 2 2 (PC)(PC)+2, если (A)=0, то (PC)(PC)+rel
JNZ rel 01110000 2 2 (PC)(PC)+2, если (A)≠0, то (PC)(PC)+rel
JC rel 01000000 2 2 (PC)(PC)+2, если (С)=1, то (PC)(PC)+rel
JNC rel 01010000 2 2 (PC)(PC)+2, если (С)=0, то (PC)(PC)+rel
JB bit, rel 00100000 3 2 (PC)(PC)+3, если (b)=l, то (PC)(PC)+rel
JNB bit, rel 00110000 3 2 (PC)(PC)+3, если (b)=0, то (PC)(PC)+rel
JBC bit, rel 00010000 3 2 (PC) (PC) + 3, если (b)=1, то (b) 0 и (PC) (PC) + rel
DJNZ Rn, rel 11011rrr 2 2 (PC) (PC) + 2, (Rn) (Rn) - 1, если (Rn) ≠ 0, то (PC) (PC) + rel
DJNZ ad, rel 11010101 3 2 (PC) (PC) + 2, (ad) (ad) - 1, если (ad) ≠ 0, то (PC) (PC) + rel
CJNE A, ad, rel 10110101 3 2 (PC) (PC) + 3,если (A) ≠ (ad), то (PC) (PC) + rel,если (A) < (ad), то (C) 1, иначе (C) 0
CJNE A, #d, rel 10110100 3 2 (PC) (PC) + 3,если (A) ≠ #d, то (PC) (PC) + rel,если (A) < #d, то (C) 1, иначе (С) 0
CJNE Rn, #d, rel 10111rrr 3 2 (PC) (PC) + 3,если (Rn) ≠ #d, то (PC) (PC) + rel,если (Rn) < #d, то (C) 1, иначе (С) 0
CJNE @Ri,#d,rel 1011011i 3 2 (PC) (PC) + 3,если ((Ri)) ≠ #d, то (PC) (PC) + rel,если ((Ri)) < #d, то (C) 1, иначе (C) 0
LCALL adl6 00010010 3 2 (PC) (PC) + 3, (SP) (SP) +1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC) ad16
ACALL ad11 a10a9a810001 2 2 (PC) (PC) + 2, (SP) (SP) + 1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC0-10) ad11
RET 00100010 1 2 (PC8…15) ((SP)), (SP) (SP) - 1, (PC0…7) ((SP)), (SP) (SP) – 1
RETI 00110010 1 2 (PC8…15) ((SP)), (SP) (SP) - 1, (PC0…7) ((SP)), (SP) (SP) – 1
NOP 00000000 1 1 (PC) (PC) + 1

Команда безусловного перехода LJMP (L – long – длинный) осуществляет переход по абсолютному 16-битному адресу, указанному в теле команды, т. е. команда обеспечивает переход в любую точку памяти программ.

Действие команды AJMP (А – absolute – абсолютный) аналогично команде LJMP, однако в теле команды указаны лишь 11 младших разрядов адреса. Поэтому переход осуществляется в пределах страницы размером 2 Кбайт, при этом надо иметь в виду, что сначала содержимое счетчика команд увеличивается на 2 и только потом заменяются 11 разрядов адреса.

В отличие от предыдущих команд, в команде SJMP (S – short – короткий) указан не абсолютный, а относительный адрес перехода. Величина смещения reI рассматривается как число со знаком, а, следовательно, переход возможен в пределах – 128...+127 байт относительно адреса команды, следующей за командой SJMP.

Команда косвенного перехода JMP @A+DPTR позволяет вычислять адрес перехода в процессе выполнения самой программы.

Командами условного перехода можно проверять следующие условия:

- JZ — аккумулятор содержит нулевое значение;

- JNZ — аккумулятор содержит не нулевое значение

- JC — бит переноса С установлен;

- JNC — бит переноса С не установлен;

- JB — прямо адресуемый бит равен 1

- JNB — прямо адресуемый бит равен 0;

- JBC — прямо адресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.

Все команды условного перехода содержат короткий относительный адрес, т. е. переход может осуществляться в пределах—128... +127 байт относительно следующей команды.

Команда DJNZ предназначена для организации программных циклов. Регистр Rn или байт по адресу ad, указанные в теле команды, содержат счетчик повторений цикла, а смещение rеl — относительный адрес перехода к началу цикла. При выполнении команды содержимое счетчика уменьшается на 1 и проверяется на 0. Если значение содержимого счетчика не равно 0, то осуществляется переход на начало цикла, в противном случае выполняется следующая команда.

Команда CJN удобна для реализации процедур ожидания внешних событий. В теле команды указаны "координаты" двух байт и относительный адрес перехода rel. В качестве двух байт могут быть использованы, например, значения содержимого аккумулятора и прямо адресуемого байта или косвенно адресуемого байта и константы. При выполнении команды значения указанных двух байт сравниваются и в случае, если они не одинаковы, осуществляется переход. Например, команда

WAIT: CJNE A, P0, WAIT

будет выполняться до тех пор, пока значения на линиях порта P0 не совпадут со значениями содержимого аккумулятора.

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

Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, а команда возврата из процедуры обработки прерывания RETI, кроме того, разрешает прерывание обслуженного уровня. Команды RET и RETI не различают, какой командой – LCALL или ACALL – была вызвана подпрограмма, так как и в том, и в другом случае в стеке сохраняется полный 16-разрядный адрес возврата.



Дата добавления: 2016-11-26; просмотров: 2004;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.