Чем отличаются команды ret и reti

от admin

Система команд MCS-51 (Лекция)

Система команд MCS-51 поддерживает единый набор инструкций, который предназначен для выполнения 8-битовых алгоритмов управления исполнительными устройствами. Существует возможность использования быстрых методов адресации к внутреннему ОЗУ, осуществления битовых операций над небольшими структурами данных. Имеется развернутая система адресации однобитовых переменных как самостоятельного типа данных, позволяющая использовать отдельные биты в логических и управляющих командах булевой алгебры.

Режимы адресации : набор команд MCS-51 поддерживает следующие режимы адресации. Прямая адресация: операнд определяется 8-битовым адресом в инструкции. Прямая адресация используется только для младшей половины внутренней памяти данных и регистров SFR. Косвенная адресация: инструкция адресует регистр, содержащий адрес операнда. Данный вид адресации используется для внешнего и внутреннего ОЗУ. Для указания 8-битовых адресов могут использоваться регистры R0 и R1 выбранного регистрового банка или указатель стека SP. Для 16-битовой адресации используется только регистр указателя данных DPTR.

Регистровые инструкции : регистры R0–R7 текущего регистрового банка могут быть адресованы через конкретные инструкции, содержащие 3-битовое поле, указывающее номер регистра в самой инструкции. В этом случае соответствующее поле адреса в команде отсутствует. Операции с использованием специальных регистров : некоторые инструкции используют индивидуальные регистры (например, операции с аккумулятором, DPTR, и т. д.). В данном случае адрес операнда вообще не указывается в команде. Он предопределяется кодом операции.

Непосредственные константы : константа может находиться прямо в команде за кодом операции.

Индексная адресация : индексная адресация может использоваться только для доступа к программной памяти и только в режиме чтения. В этом режиме осуществляется просмотр таблиц в памяти программ. 16-битовый регистр (DPTR или программный счетчик) указывает базовый адрес требуемой таблицы, а аккумулятор указывает на точку входа в нее.

Набор команд имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы. Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, вслед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений.

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

Таблица. Обозначения и символы, используемые в системе команд

Регистры текущего выбранного банка регистров

Номер загружаемого регистра, указанного в команде

Прямо адресуемый 8-битовый внутренний адрес ячейки данных, который может быть ячейкой внутреннего ОЗУ данных (0–127) или регистром специальных функций SFR (128–255)

Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных

8-битовое непосредственное данное, входящее в код операции (КОП)

Старшие биты (15–8) непосредственных 16-битовых данных

Младшие биты (7­–0) непосредственных 16-битовых данных

11-битовый адрес назначения

Младшие биты адреса назначения

8-битовый байт смещения со знаком

Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или регистре специальных функций SFR

Биты адреса назначения

Содержимое элемента Х

Содержимое по адресу, хранящемуся в элементе Х

Разряд М элемента Х

Операции:
сложения
вычитания
умножения
деления
логического умножения (операция И)
логического сложения (операция ИЛИ)
сложения по модулю 2 ( исключающее ИЛИ)
инверсия элемента Х

Мнемонические обозначения функций однозначно связаны с конкретными комбинациями способов адресации и типами данных. Всего в системе команд возможно 111 таких сочетаний.

2. Арифметические и логические инструкции

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

ADD A ,7 F 16 – прибавить к содержимому регистра А число 7 F 16 и результат сохранить в регистре А;

ADD A ,@ R 0 – прибавить к содержимому регистра А число, адрес которого (@ – commercial at ) хранится в регистре R 0 (косвенная адресация), и результат сохранить в регистре А;

ADD A,R7 – прибавить к содержимому регистра А содержимое регистра R 7 и результат сохранить в регистре А;

ADD A,#127 – прибавить к содержимому регистра А число, адрес ячейки хранения которого 127 (# – символ номера), и результат сохранить в регис т ­- ре А.

Все арифметические инструкции выполняются за один машинный цикл за исключением команды INC DPTR (смещение указателя данных DPTR на следующий байт), требующей два машинных цикла, а также операций умножения и деления, выполняемых за 4 машинных цикла. Любой байт во внутренней памяти данных может быть инкрементирован и декрементирован без использования аккумулятора.

Инструкция MUL AB производит умножение ( multiplication – умножение) данных в аккумуляторе на данные, находящиеся в регистре B, помещая произведение в регистры A (младшая половина) и B (старшая половина).

Инструкция DIV AB делит ( division – деление) содержимое аккумулятора на значение в регистре B, оставляя остаток в B, а частное – в аккумуляторе.

Инструкция DA A предназначена для двоично-десятичных арифметических операций (арифметические операции над числами, представленными в двоично-десятичном коде). Она не делает преобразования двоичного числа в двоично-десятичное , а лишь обеспечивает правильный результат при сложении двух двоично-десятичных чисел.

Пример логической команды: операция логического И может быть выполнена одной из следующих команд:

ANL A ,7 F 16 – логическое умножение содержимого регистра А на число 7 F 16 и результат сохраняется в регистре А;

ANL A ,@ R 1 – логическое умножение содержимого регистра А на число, адрес которого хранится в регистре R 1 (косвенная адресация), и результат сохранить в регистре А;

ANL A,R6 – логическое умножение содержимого регистра А на содержимое регистра R 6, и результат сохранить в регистре А;

ANL A,#53 – логическое умножение содержимого регистра А на число, адрес ячейки хранения которого 5316, и результат сохранить в регистре А.

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

Операции циклического сдвига RL A, RLC A и т. д. перемещают содержимое аккумулятора на один бит вправо или влево. В случае левого циклического сдвига младший бит перемещается в старшую позицию. В случае правого циклического сдвига происходит обратное .

Операция SWAP A осуществляет обмен младшей и старшей тетрад в аккумуляторе.

3. Команды передачи данных

Команда MOV dest,src позволяет пересылать данные между ячейками внутреннего ОЗУ или областью регистров специальных функций SFR без использования аккумулятора. При этом работа с верхней половиной внутреннего ОЗУ может осуществляться только в режиме косвенной адресации, а обращение к регистрам SFR – только в режиме прямой адресации.

Во всех микросхемах MCS-51 стек размещается непосредственно в резидентной памяти данных и увеличивается вверх. Инструкция PUSH вначале увеличивает значение в регистре указателя стека SP, а затем записывает в стек байт данных. Команды PUSH и POP используются только в режиме прямой адресации (записывая или восстанавливая байт), но стек является всегда доступным при косвенной адресации через регистр SP. Таким образом, стек может использовать и верхние 128 байт памяти данных. Эти же соображения исключают возможность использования стековых команд для адресации регистров SFR.

Инструкции передачи данных включают в себя 16-битовую операцию пересылки MOV DPTR,#data16, которая используется для инициализации регистра указателя данных DPTR при просмотре таблиц в программной памяти или для доступа к внешней памяти данных.

Операция XCH A,byte применяется для обмена данными между аккумулятором и адресуемым байтом. Команда XCHD A,@Ri аналогична предыдущей , но выполняется только для младших тетрад , участвующих в обмене операндов.

Для доступа к внешней памяти данных используется только косвенная адресация. В случае однобайтных адресов используются регистры R0 или R1 текущего регистрового банка, а для 16-разрядных – регистр указателя данных DPTR. При любом методе доступа к внешней памяти данных аккумулятор играет роль источника либо приемника информации.

Для доступа к таблицам, размещённым в программной памяти, используются команды:

MOVC A,@A+ DPTR ;

MOVC A,@A+ PC .

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

4. Булевы операции

Микросхемы MCS-51 содержат в своем составе «булевый» процессор. Внутреннее ОЗУ имеет 128 прямо адресуемых бит. Пространство регистров специальных функций SFR может также поддерживать до 128 битовых полей. Битовые инструкции осуществляют условные переходы, пересылки, сброс, инверсии, операции «И» и «ИЛИ». Все указанные биты доступны в режиме прямой адресации.

Бит переноса CF в регистре специальных функций «слово состояния программы PSW» используется как однобитный аккумулятор булевого процессора.

5. Инструкции переходов

Адреса операций переходов обозначаются на языке ассемблера меткой либо реальным значением в пространстве памяти программ. Адреса условных переходов ассемблируются в относительное смещение – знаковый байт, прибавляемый к программному счетчику PC в случае выполнения условия перехода. Границы таких переходов лежат в пределах между минус 128 и 127 относительно первого байта, следующего за инструкцией. В регистре специальных функций «слово состояния программы PSW» отсутствует флажок нуля, поэтому инструкции JZ и JNZ проверяют условие «равно нулю» как тестирование данных в аккумуляторе.

Существует три вида команды безусловного перехода: SJMP, LJMP и AJMP – различающиеся форматом адреса назначения. Инструкция SJMP кодирует адрес как относительное смещение, и занимает два байта. Дальность перехода ограничена диапазоном от минус 128 до 127 байт относительно инструкции, следующей за SJMP.

В инструкции LJMP используется адрес назначения в виде 16-битной константы. Длина команды составляет три байта. Адрес назначения может располагаться в любом месте памяти программ.

Команда AJMP использует 11-битную константу адреса. Команда состоит из двух байт. При выполнении этой инструкции младшие 11 бит адресного счетчика замещаются 11-битным адресом из команды. Пять старших бит программного счетчика PC остаются неизменными. Таким образом, переход может производиться внутри 2К-байтного блока, в котором располагается инструкция, следующая за командой AJMP.

Существует два вида команды вызовы подпрограммы: LCALL и ACALL. Инструкция LCALL использует 16-битный адрес вызываемой подпрограммы. В данном случае подпрограмма может быть расположена в любом месте памяти программ. Инструкция ACALL использует 11-битный адрес подпрограммы. В этом случае вызываемая подпрограмма должна быть расположена в одном 2К-байтном блоке с инструкцией, следующей за ACALL. Оба варианта команды кладут на стек адрес следующей команды и загружают в программный счетчик PC соответствующее новое значение.

Подпрограмма завершается инструкцией RET, позволяющей вернуться на инструкцию, следующую за командой CALL. Эта инструкция снимает со стека адрес возврата и загружает его в программный счетчик PC. Инструкция RETI используется для возврата из подпрограмм обработки прерываний. Единственное отличие RETI от RET состоит в том, что RETI информирует систему о том, что обработка прерывания завершилась. Если в момент выполнения RETI нет других прерываний, то она идентична RET.

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

Команда CJNE сравнивает два своих операнда как беззнаковые целые и производит переход по указанному в ней адресу, если сравниваемые операнды не равны. Если первый операнд меньше, чем второй, то бит переноса CF устанавливается в «1».

Система команд микроконтроллеров AVR

Микроконтроллеры (далее — МК) серии AVR имеют от 90 до 120 команд в зависимости от модели. Здесь рассмотрены только те команды, которые использованы в нашей программе.

Эта команда складывает содержимое регистров reg1 и reg2, сохраняя результат в регистре reg1. Изменяет состояние флагов H, S, V, N, Z, C.

Эта команда выполняет операцию «Логическое И» между регистрами reg1 и reg2, сохраняя результат в регистре reg1. Изменяет состояние флагов S, V, N, Z.

Эта команда выполняет операцию «Логическое И» между содержимым старшего регистра hreg и константой number (0…255), сохраняя результат в регистре. Изменяет состояние флагов S, V, N, Z.

Эта команда проверяет состояние бита регистра SREG ($3F) и переходит к метке label, если бит сброшен. Метка должна находиться в пределах 63 команд от команды brbc.

Читать:
Count c что это

Эта команда проверяет состояние бита регистра SREG ($3F) и переходит к метке label, если бит установлен. Метка должна находиться в пределах 63 команд от команды brbs.

Эта команда проверяет флаг переноса (С) и переходит к метке label, если он сброшен.

Эта команда проверяет флаг переноса (С) и переходит к метке label, если он установлен.

Эта команда проверяет флаг нуля (Z) и переходит к метке label, если он установлен.

Эта команда проверяет флаг нуля (Z) и переходит к метке label, если он сброшен.

Эта команда сбрасывает в 0 бит регистра ввода-вывода ioreg ($00…$1F). Номер бита определяет операнд bit.

Эта команда сбрасывает все биты регистра reg в 0. Изменяет состояние флагов S, V, N, Z.

Эта команда сравнивает содержимое регистров reg1 и reg2 путем вычитания reg2 из reg1. Содержимое регистров не изменяется. Изменяет состояние флагов H, S, V, N, Z, C.

Эта команда сравнивает содержимое регистра hreg с константой number путем вычитания константы из регистра. Содержимое регистров не изменяется. Изменяет состояние флагов H, S, V, N, Z, C. Команда работает только с регистрами R16…R31.

Эта команда уменьшает на единицу содержимое регистра reg, записывая результат обратно в регистр. Изменяет состояние флагов S, V, N, Z.

Эта команда пересылает содержимое регистра ввода-вывода ioreg в РОН reg.

Эта команда увеличивает на единицу содержимое регистра reg, записывая результат обратно в регистр. Изменяет состояние флагов S, V, N, Z.

Эта команда загружает один байт из памяти данных (адрес ячейки памяти содержится в регистре longer) в регистр reg (для модели 1200).

Эта команда загружает непосредственное значение number в старший регистр hreg (команда может работать только с регистрами R16…R31). Число number должно находиться в пределах 0…255.

Эта команда выполняет логический сдвиг вправо содержимого регистра reg. При этом 0-й бит копируется в флаг C, 7-й бит сбрасывается в 0. Изменяет состояние флагов S, V, N, Z, C.

Эта команда выполняет операцию «Логическое ИЛИ» между содержимым старшего регистра hreg и константой number (0…255), сохраняя результат в регистре. Изменяет состояние флагов S, V, N, Z.

Эта команда пересылает содержимое регистра общего назначения reg в регистр ввода-вывода ioreg.

RCALL

Эта команда вызывает подпрограмму, обозначенную меткой label, которая должна находиться в пределах 2048 команд от команды rcall (относительный вызов).

Эта команда выполняет возврат из подпрограммы, переходя на команду, которая следует за исходной командой call.

Эта команда выполняет возврат из подпрограммы и устанавливает флаг общего разрешения прерываний.

Относительный переход. Выполняет переход к участку программы, обозначенному меткой label, которая должна находиться в пределах 2048 от команды RJMP.

Эта команда устанавливает в 1 бит регистра ввода-вывода ioreg ($00…$1F). Номер бита определяет операнд bit.

Эта команда проверяет бит регистра ввода-вывода ioreg ($00…$1F) и пропускает следующую команду, если этот бит сброшен. Номер бита определяет операнд bit.

Эта команда проверяет бит регистра ввода-вывода ioreg ($00…$1F) и пропускает следующую команду, если этот бит установлен. Номер бита определяет операнд bit.

Эта команда устанавливает флаг общего разрешения прерываний.

Эта команда устанавливает все биты регистра reg в 1. Изменяет состояние флагов S, V, N, Z. Команда может работать только с регистрами R16…R31.

Для модели 1200 эта команда сохраняет содержимое регистра reg в памяти данных (адрес ячейки памяти содержится в регистре longer), т.е. косвенно пересылает содержимое РОН reg по адресу, хранящемуся в регистре longer.

Вычитает из старшего регистра hreg константу number. Результат сохраняется в этом же регистре. Изменяет состояние флагов H, S, V, N, Z, C. Команда может работать только с регистрами R16…R31.

Выполнение команд ветвления и перехода

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

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

Рассмотрим, как выполняются команды перехода на примере микроконтроллеров семейства AVR (рис. 4).

Выборка команды РС=РС+1

Декодирование команды

Выборка адреса перехода РС=РС+1

Выполнение команды РС=А

Рис. 4. Пример выполнения команды перехода

Общий принцип выполнения команд уже описан, поэтому остановимся только на особенностях команд ветвления и перехода.

В составе команд микроконтроллеров семейства AVR имеются команды ветвления (или условного перехода) и команды безусловного перехода.

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

На рис. 4 приведен пример выполнения команды безусловного перехода JMP по адресу 6. Как видим, единственное отличие от уже описанного способа выполнения команд (см. рис. 3) состоит в том, что па этапе выполнения команды изменяется значение регистра-счетчика команд PC.

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

Более подробно о командах ветвления микроконтроллеров семейства AVR можно узнать в [1,2].

Выполнение команд вызова подпрограмм

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

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

Стек — это структура памяти, работающая по принципу «последний пришел — первый ушел». Для организации стека возвратов используется регистр-указатель стека SR

Имеются также специальные машинные команды работы со стеком — PUSH и POP.

Команда PUSH — поместить содержимое указанного регистра на стек. В процессе выполнения данной команды значение регистра-указателя стека SP уменьшается на единицу. Затем содержимое указанного регистра помещается в память данных по адресу, значение которого хранится в SP.

Команда POP — получить со стека значение и поместить его в указанный регистр. В процессе выполнения данной команды из памяти данных извлекается байт, расположенный по адресу, значение которого хранится в SP. Значение этого байта данных помещается в указанный регистр. Затем значение регистра-указателя стека SP увеличивается на единицу.

Рассмотрим, как происходит вызов подпрограммы (команда CALL) и возврат из подпрограммы (команда RET).

Команда CALL в качестве операнда использует абсолютный адрес подпрограммы, имеющий размер 16 бит (2 байта). К началу этапа выполнения команды CALL регистр PC содержит адрес следующей выполняемой команды, т. е. адрес возврата из вызываемой подпрограммы (см. рис. 3). Команда CALL во время этапа выполнения производит следующие действия:

  • • уменьшает значение регистра-указателя стека SP на 2, т. к. регистр PC имеет размер 2 байта;
  • • помещает на стек содержимое регистра PC (адреса возврата подпрограммы);
  • • заносит в регистр PC адрес подпрограммы (полностью аналогично команде JMP).

Следующая команда, которая будет выполнена за командой вызова подпрограммы, будет первая команда вызываемой подпрограммы.

Кроме команды CALL, в микроконтроллерах семейства AVR имеются и другие команды вызова подпрограмм — ICALL и RCALL. Эти команды отличаются от команды CALL только способом вычисления адреса подпрограммы:

  • • команда CALL использует в качестве адреса подпрограммы константу, размером 2 байта. При этом размер команды CALL — 4 байта: 2 байта — КОП и 2 байта — адрес подпрограммы;
  • • команда RCALL использует в качестве адреса подпрограммы константу, размером 12 бит, входящую в КОП. Адрес вызова подпрограммы вычисляется путем сложения содержимого регистра PC с 12-битной константой, интерпретируемой как знаковое целое число. Такая команда позволяет осуществить вызов подпрограмм в пределах от +2047 до -2048 слов относительно адреса расположения команды вызова. При этом размер команды RCALL — 2 байта;
  • • команда ICALL использует в качестве адреса подпрограммы содержимое регистра Z (т. е. пары регистров R30:R31). Данная команда удобна при наличии таблицы подпрограмм, когда адрес вызываемой подпрограммы вычисляется, а не задается константой.

Команда RET не имеет аргументов и, во время этапа выполнения, производит следующие действия:

  • • снимает со стека адрес возврата из подпрограммы (2 байта) и заносит этот адрес в регистр PC;
  • • увеличивает значение регистра-указателя стека SP на 2.

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

Кроме команды RET, в микроконтроллерах семейства AVR имеется команда RETI, используемая для возврата из процедуры обработки прерывания. Отличие команды RETI от команды RET состоит в том, что команда RETI во время выполнения устанавливает глобальный флаг разрешения прерываний. В остальном команды RET и RETI полностью аналогичны. Подробнее о прерываниях рассказано в соответствующем разделе.

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

Кроме того, если мы используем команды PUSH и POP для сохранения на стеке или извлечения со стека данных — то непарное использование этих команд в подпрограмме может привести к неверной работе команды RET.

Поэтому следует помнить несколько правил обращения к подпрограммам в машинном коде, помогающих избегать краха программы из-за повреждения содержимого стека:

Команды переходов

Команды группы переходов можно подразделить на 3 подгруппы. Первая подгруппа — безусловные переходы. Список команд этой подгруппы приведён в табл. 7.7.

Команды безусловных переходов

Переход по адресу

Переход по @A+DPIR

Вызов подпрограммы по адресу

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

Возврат из прерывания

Под одним мнемоническим обозначением JMP скрыты три команды перехода: SJMP, LJMP и AJMP, которые отличаются форматом адреса перехода. JMP является общим обозначением, применяемым в тех случаях, когда программисту безразлично, какую команду перехода использовать.

Для короткого перехода (Short JMP, Short — короткий) адрес перехода определяется смещением, в качестве которого выступает второй байт команды. Этот байт интерпретируется как число со знаком, что обеспечивает переход на величину от -128 до +127 байт относительно адреса команды, следующей за инструкцией S JMP.

Инструкция длинного перехода L JMP (Long JMP, Long — длинный) имеет длину в три байта, причём два последних байта представляют адрес. Эта команда дает возможность перехода к любому адресу из 64 Кбайт памяти программ.

Команда среднего перехода (Average JMP, Average — средний) является двухбайтной. Первый байт помимо кода операции содержит 3 бита адреса перехода, а второй байт — остальные 8 бит адреса перехода. При выполнении команды AJMP эти 11 бит подставляются в 11 младших разрядов PC, а старшие 5 бит остаются без изменений. Следовательно, переход возможен в пределах блока в 2 Кбайт, в котором расположена команда AJMP.

Во всех случаях программисту следует описывать адрес перехода или в виде метки, или в виде 16-битной константы. Ассемблер сам подставит корректный формат адреса.

Инструкция JMP @A+DPTR предназначена для выполнения переходов по таблице. В момент выполнения команды адрес перехода вычисляется как сумма содержимого шестнадцатибитного DPTR и содержимого аккумулятора. Обычно DPTR устанавливается на адрес таблицы переходов, а в аккумуляторе находится смещение (индекс) относительно начала таблицы. Практический пример использования этой команды приведен ниже:

MOV DPTR, #JUMP_TABLE

MOV A, INDEX_NUMBER

RL А /обеспечивается двухбайтовый интервал

;при последовательных значениях номера /индекса (0,1,2,3. )

По аналогии с командой JMP команда CALL addr имеет две формы: короткую и среднюю: LCALL и ACALL. Все замечания относительно форматов JMP верны и для CALL.

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

Вторая подгруппа — условные переходы. Их характеристики приведены в табл.7.8. Все команды этой подгруппы выполняют короткий переход и содержат байт смещения, который из-за отсутствия места в табл. 7.8 не показан. Отметим, что переход по нулевому/ненулевому условию производится на основе содержимого аккумулятора, а флаг Z в слове состояния программы отсутствует.

Похожие статьи