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

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

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

Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм (табл. 3.8).

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

Таблица 3.8

Название команды Мнемокод Т Б Ц Операция
Длинный переход в полном объеме ПП LJMP ad16 PC ad16
Абсолютный переход внутри страницы в 2 Кб AJMP ad11 PC (PC) + 2, PC0-10 ad11
Короткий относительный переход внутри страницы в 256 байт SJMP rel PC (PC) + 2, PC (PC) +rel
Косвенный относительный переход JMP @A+DPTR PC (A) + (DPTR)
Переход, если аккумулятор равен нулю JZ rel PC(PC)+2, если (A)=0, то PC(PC)+rel
Переход, если аккумулятор не равен нулю JNZ rel PC(PC)+2, если (A)≠0, то PC(PC)+rel
Переход, если перенос равен единице JC rel PC(PC)+2, если (С)=1, то PC(PC)+rel
Переход, если перенос равен нулю JNC rel PC(PC)+2, если (С)=0, то PC(PC)+rel
Переход, если бит равен единице JB bit, rel PC(PC)+3, если (b)=l, то PC(PC)+rel
Переход, если бит равен нулю JNB bit, rel PC(PC)+3, если (b)=0, то PC(PC)+rel
Переход, если бит установлен, с последующим сбросом бита JBC bit, rel PC (PC) + 3, если (b)=1, то b 0 и PC (PC) + rel
Декремент регистра и переход, если не нуль DJNZ Rn, rel PC (PC) + 2, Rn (Rn) – 1, если (Rn) ≠ 0, то PC (PC) + rel
Декремент прямоадресуемого байта и переход, если не нуль DJNZ ad, rel PC (PC) + 2, ad (ad) – 1, если (ad) ≠ 0, то PC (PC) + rel
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно CJNE A, ad, rel PC (PC) + 3, если (A) ≠ (ad), то PC (PC) + rel, если (A) < (ad), то C 1, иначе C 0
Сравнение аккумулятора с константой и переход, если не равно CJNE A, #d, rel PC (PC) + 3, если ≠ #d, то PC (PC) + rel, если (A) < #d, то C 1, иначе С0
Сравнение регистра с константой и переход, если не равно CJNE Rn, #d, rel PC (PC) + 3, если Rn ≠ #d, то PC (PC) + rel, если (Rn) < #d, то C 1, иначе С0
Сравнение байта в РПД с константой и переход, если не равно CJNE @Ri,#d,rel PC (PC) + 3, если ((Ri)) ≠ #d, то PC (PC) + rel, если ((Ri)) < #d, то C 1, иначе C0
Длинный вызов подпрограммы LCALL adl6 PC (PC) + 3, SP (SP) +1, (SP) (PC0…7), SP (SP) + 1, (SP) (PC8…15), PC ad16
Абсолютный вызов подпрограммы в пределах страницы в 2 Кб ACALL ad11 PC (PC) + 2, SP (SP) + 1, (SP) (PC0…7), SP (SP) + 1, (SP) (PC8…15), PC0-10 ad11
Возврат из подпрограммы RET PC8…15 ((SP)), SP (SP) – 1, PC0…7 ((SP)), SP (SP) – 1
Возврат из подпрограммы обработки прерывания RETI PC8…15 ((SP)), SP (SP) – 1, PC0…7 ((SP)), SP (SP) – 1
Пустая операция NOP 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 не совпадут со значениями содержимого аккумулятора. В синтаксисе языка ASM её можно записать короче:

CJNE A, P0, $

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

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

Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг C, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг C в случае перехода.

В заключение следует отметить, что большинство Ассемблеров допускают обобщенную мнемонику JMP – для команд безусловного перехода и CALL – для команд вызова подпрограмм. Конкретный тип команды определяется Ассемблером, исходя из “длины” перехода или вызова.

Отладка программ

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

· внутрисхемным эмулятором;

· встроенным программным отладчиком;

· внешним программным отладчиком;

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

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

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

Источник: https://megaobuchalka.ru/1/6001.html

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

JMP opr команда безусловной передачи управления (jump unconditionally— перейти безусловно). Операнд opr может быть задан прямым или косвенным адресом:

l По прямому адресу: JMP метка .
Если метка в том же сегменте, что и команда JMP, переход считается внутренним (near), если не в том же сегменте — переход внешний (far).

В написании самой команды JMP разницы нет; тип перехода определяется видом метки: после метки для внутреннего перехода ставится двоеточие «:».

Транслятор по таблице меток и их адресов сам определяет атрибуты near или far, и соответственно транслирует команду передачи управления в более короткую или более длинную (в последнем случак надо менять не только содержимое регистра смещения IP, но и регистра сегментов CS).

Несколько сократить длину команды может указание программиста «JMP short метка» о том, что метка не далее 128 байт от первого байта команды JMP (это указание не обязательно, но если оно есть и ошибочно, то транслятор выдаст ошибку).

l По косвенному адресу. Косвенный адрес может быть задан: в регистре: JMP r или в памяти JMP символьное_имя.

l В памяти с косвенной адресацией: JMP near ptr [SI]; JMP far ptr [BX] и т.д.

В последних двух командах near ptr и far ptr указывать обязательно, так как какое слово содержится в регистре SI — обычное или двойное, — ассемблер заранее не знает и ему нужно помочь.

Команды перехода к подпрограмме и выхода из подпрограммы

Подпрограммы оформляются как процедуры. Процедура начинается именем процедуры и заканчивается командой выхода ret (return) и директивой endp.

В программе процедура помещается в операторные скобки: proc … endp

Около оператора proc могут быть указаны атрибуты дистанции: near — близкая процедура (в том же сегменте) или far — дальний вызов (если этот атрибут дистанции опущен, то подразумевается near).

Пример: DISP proc far; в отличие от метки после имени процедуры двоеточие не ставится:

ret

DISP endp

Команда перехода к подпрограмме: CALL opr

Вызов процедуры (call a procedure — вызов процедуры), безусловная передача управления, выполняющая короткий или дальний вызов процедуры. Флаги не меняются.

В команде CALL атрибуты near или far указывать не надо, так как ассемблер нужную информацию получит сам из директивы определения процедуры. По команде CALL должно быть выполнено:

l запоминание в стеке адреса возврата (содержимого IP и CS для следующей команды: 16 битов, если near, и 32 бита, если far);

l переход к выполнению процедуры (инициируется записью в IP и в CS (если far) нового адреса команды).

Операнд opr, определяющий адрес процедуры, бывает:

l непосредственным: CALL имя_процедуры;

l прямым — процедуру с атрибутом near можно вызвать через регистр, в котором содержится смещение адреса процедуры: CALL r;

l косвенным:

l процедура с атрибутом near вызывается, используя переменную размером в слово: CALL word ptr символьное_имя,

l процедура с атрибутом farиспользуя переменную размером в двойное слово: CALL dword ptr символьное_имя.

Команда выхода из подпрограммы

RET — возврат из процедуры (return from procedure). Команда извлекает из стека адрес возврата и возвращает управление из процедуры, вызванной ранее командой CALL. Необязательный параметр команды RET указывает количество байтов, которые освобождаются в стеке после извлечения адреса возврата.

Если процедура имеет атрибут near, то команда RET извлекает из стека одно слово и заносит его в регистр IP; если процедура имеет атрибут far, то команда RET извлекает из стека два слова: сначала смещение адреса, а затем адрес сегмента, и заносит их, соответственно, в регистр IP и в регистр CS.

Флаги не меняются.

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

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

Есть 31 команда условной передачи управления (УПУ), но некоторые попарно совпадают, например: «если >» и «если не < и не =». Разных команд всего 17. Условная передача управления может быть только ближней (near) и короткой (short), то есть метка перехода должна быть в том же сегменте и не далее ±128 байтов от УПУ.

Общий формат команды:

J* метка
где *— условие передачи управления.

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

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

Надо четко различать J* без знака и сознаком. Например, пусть регистр AX содержит 11000110, а регистр BX — 00010110, и команда CMP AX, BX сравнивает содержимое этих регистров. Если данные беззнаковые, то число в AX больше, а если знаковые — то меньше (поскольку в последнем случае единица в крайнем левом разряде определяет знак числа — в AX число отрицательное).

Читайте также:  Электронный барометр своими руками

Команды условной передачи управления для беззнаковых данных

l JA/JNBE (Jump if Above/Not Below nor Equal) — переход, если выше/не ниже или равно (переход, если флаги ZF = 0 и CF = 0).

l JAE/JNB (Jump if Above or Equal/Not Below) — переход, если выше или равно/не ниже (CF = 0).

l JB/JNAE (Jump if Below/Not Above nor Equal) — переход, если ниже/не выше или равно (CF = 1).

l JBE/JNA (Jump if Below or Equal/Not Above) — переход, если ниже или равно/не выше (CF =

l 1 или AF = 1).

Команды условной передачи управления для знаковых данных

l JG/JNLE (Jump if Greater/Not Less nor Egual) — переход, если больше/не меньше или равно (ZF = 0 и SF = OF).

l JGE/JNL (Jump if Greater or Equal/Not Less) — переход, если больше или равно/не меньше (SF = OF).

l JL/JNGE (Jump if Less/Not Greater nor Equal) — переход, если меньше/не больше или равно (SF >< OF).

l JLE/JNG (Jump if Less or Equal/Not Greater) — переход, если меньше или равно/не больше (ZF = 1 или SF >< OF).

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

l JE/JZ (Jump if Equal/Zero) — переход, если равно/нуль (ZF = 1).

l JNE/JNZ (Jump if Not Equal/Not Zero) — переход, если не равно/не нуль (ZF = 0).

l JS (Jump if Sign) — переход, если есть знак (отрицательно) (SF = 1).

l JNS (Jump if Not Sign) — переход, если нет знака (положительно) (SF = 0).

l JC (Jump if Carry)переход, если есть перенос (аналог JB) (CF = 1).

l JNC(Jump if Not Carry) — переход, если нет переноса (аналог JNB) (CF = 0).

l JO (Jump if Overflow) — переход, если есть переполнение (OF = 1).

l JNO (Jump if Not Overflow) — переход, если нет переполнения (OF = 0).

l JP/JPE (Jump if Parity/Parity Even) — переход, если есть четность (PF = 1).

l JNP/JPO (Jump if No Parity/Parity Odd) — переход, если нет четности (PF = 0).

l JCXZ (Jump if CX is Zero) — переход, если содержимое регистра CX равно 0 (CX = 0).

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

Используются для повторения цикла известное число раз. Количество повторений предварительно записывается в регистр CX (счетчик циклов). Каждый цикл автоматически уменьшает показание CX на 1.

Основная команда: LOOP метка.

Циклы повторяются до обнуления CX.

Команда уменьшает значение в регистре CX на единицу и передает управление по прямому адресу — метке, если значение в регистре CX не равно нулю; в противном случае выполняется следующая по порядку команда.

Флаги не меняет. Существуют еще 4 альтернативные команды, в которых можно поставить дополнительные условия. Передачи управления командами типа LOOP только ближние и короткие (метки near и short).

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

У команд прерывания есть некоторая аналогия с командами вызова процедуры CALL: прекращается выполнение текущей программы и осуществляется переход к подпрограмме обработки прерывания; но при прерываниях нет деления на процедуры near или far, так как начальный адрес подпрограммы обработки прерывания (вектор прерывания) берется из таблицы векторов ОЗУ и он всегда 32-битовый; кроме того, при вызове процедуры в стеке сохраняется только адрес возврата, а при прерывании еще и флаги.

Имеются три команды прерывания.

l INT opr
Прервать ( INTerrupt) выполнение программы и передать управление по одному из 256 адресов (векторов прерывания), определяемых номером прерывания — opr. По этой команде микропроцессор:

l помещает в стек содержимое регистров: FL (флагов), CS (сегмента команд), IP (указателя команд);

l обнуляет флаги TF и IF (флаги системного прерывания и блокировки прерывания);

l загружает в CS и IP, соответственно, второе и первое слова вектора прерываний, считанного из таблицы векторов в ОЗУ по адресу 4×opr (4×номер прерывания); вся таблица векторов занимает 1024 байта, то есть всего может быть 256 различных векторов прерывания. Например, команда INT 1Ah считает из ОЗУ вектор, находящийся по адресу 68h = 4·1Ah, то есть в регистр CS будет загружен адрес сегмента из слова по адресу 6Ah, а в регистр IP — из слова по адресу 68h смещение программы обработки этого прерывания.

Команда сбрасывает флаги IF = 0 и TF = 0.

l INTO
Прервать по переполнению (INTerrupt if Overflow),.при возникновении переполнения флаг OF = 1 и управление передается по адресу 10H (аналог команды INT 4). Команда сбрасывает флаги IF = 0 и TF = 0.

l IRET
Возврат из обработки прерывания (interrupt return) обеспечивает возврат из программы обработки прерывания. IRET — последняя команда подпрограммы обработки прерывания, по этой команде из стека извлекаются 3 последние слова и загружаются в регистры IP, CS и FL, при этом содержимое SP увеличивается на 6. Команда устанавливает значения всех флагов.

Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:

Источник: https://zdamsam.ru/a47476.html

Системное программирование Лекция 6 Команды передачи управления

Системное программирование Лекция № 6 Команды передачи управления

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

Команды передачи управления 1. Команды безусловной передачи управления: команда безусловного перехода; вызов процедуры и возврата из процедуры; вызов программных прерываний и возврат из программных прерываний; 2.

Команды безусловной передачи управления: команды перехода по результату команды сравнения; команды перехода по состоянию определенного флага; команды перехода по содержимому регистра СХ. 3.

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

Метки Место, куда необходимо передать управление, определяется меткой.

Метка – это символическое имя, обозначающее определенную ячейку памяти, предназначенное для использования в качестве операнда в командах передачи управления.

Транслятор ассемблера присваивает любой метке три атрибута: имя сегмента кода, где эта метка описана; смещение – расстояние в байтах от начала сегмента кода, в котором описана метка; тип метки, или атрибут расстояния.

Атрибут расстояния Может принимать два значения: NEAR – переход на эту метку возможен только в пределах сегмента кода, в котором описана метка.

Физически это означает, что для перехода на метку достаточно изменить только содержимое регистра IP; FAR – переход на эту метку возможен только в результате межсегментной передачи управления, для осуществления которой требуется изменение содержимого как регистра IP, так и регистра CS.

Метки Метку можно определить двумя способами: оператором : (двоеточие); директивой LABEL. С помощью оператора можно определить метку только ближнего типа – NEAR. Символическое имя в программе может быть определено только один раз.

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

Синтаксис директивы LABEL: символическое_имя LABEL тип метки Тип метки принимает значения NEAR или FAR.

Примеры создания меток Описания меток ближнего типа эквивалентны: m 1: MOV AX, pole_1 ; и m 1 LABEL NEAR MOV AX, pole_1 При необходимости использовать для одной и той же команды метку и дальнего, и ближнего типов: ; … PUBLIC m_far ; сделать метку m_far видимой ; для внешних программ … m_far LABEL FAR ; определение метки дальнего типа m_far m_near: ; определение метки ближнего типа m_near MOV AX, pole_1

Примеры создания меток … mas_b LABEL BYTE mas_w DW 15 DUP (0) … ; в этом фрагменте оба идентификатора относятся ; к одной области памяти ; и дают возможность работать с ней, используя ; разные имена, либо как с ; байтовым массивом, либо как с массивом слов … MOV mas_b+10, AL ; запись из AL в массив байтов ; (в 11 -й байт) … MOV mas_w, AX ; запись из AХ в первое слово ; области mas_w ; …

Счетчик адреса команд – это смещение конкретной команды относительно начала сегмента кода. Т. о. , каждая команда во время трансляции имеет адрес, равный значению счетчика адреса команд.

Транслятор ассемблера обеспечивает две возможности работы с этим счетчиком: использование меток, атрибуту смещения которых транслятор присваивает значение счетчика адреса той команды, перед которой они появились; применение специального символа $ для обозначения счетчика адреса команд.

Этот символ позволяет в любом месте программы использовать численное значение счетчика адреса. Str_mes DB 'Строка' Len_Msg = $ – Str_mes ; После ассемблирования Len_mes ; будет равно длине строки ORG выражение – задает значение счетчика адреса.

Безусловные переходы Что именно модифицирует команда перехода зависит: от типа операнда в команде безусловного перехода (ближний или дальний); от указания перед адресом перехода (в команде перехода) модификатора; при этом сам адрес перехода может находиться либо непосредственно в команде (прямой переход), либо в регистре или ячейке памяти (косвенный переход). Модификатор может принимать следующие значения: NEAR PTR – прямой переход на метку внутри текущего сегмента кода. Модифицируется только регистр IP на основе указанных в команде адреса (метки) или выражения, использующего символ извлечения значения счетчика адреса команд – $. FAR PTR – прямой переход на метку в другом сегменте кода. Адрес перехода задается в виде непосредственного операнда или адреса (метки) и состоит из 16 -битного селектора и 16 -битного смещения, которые загружаются, соответственно, в регистры CS и IP. WORD PTR – косвенный переход на метку внутри текущего сегмента кода. Модифицируется (значением смещения из памяти, по указанному в команде адресу или из регистра) только IP. Размер смещения 16 бит. DWORD PTR – косвенный переход на метку в другом сегмента кода. Модифицируются (значением из памяти – и только из памяти, из регистра нельзя) оба регистра, CS и IP. Первое слово этого адреса представляет смещение и загружается в IP; второе загружается в CS.

Команда безусловного перехода JMP Синтаксис команды безусловного перехода: JMP [модификатор] адрес_перехода – безусловный переход без сохранения информации о точке возврата. Адрес_перехода представляет собой адрес в виде метки либо адрес области памяти, в котором находится указатель перехода.

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

Три варианта внутрисегментного использования команды JMP: прямой короткий (расстояние от команды JMP до адреса_перехода не более чем – 128 или +127 байтов); прямой (позволяет производить переходы в пределах 64 Кбайт относительно следующей за JMP команды); косвенный.

Команда безусловного перехода JMP SHORT PTR m 1 …; не более 35 -40 команд (127 байтов) m 1: или m 1: …; не более 35 -40 команд (-128 байтов) JMP m 1 _____________ LEA BX, m 1 JMP BX ; адрес перехода в регистре ВХ … m 1: _____________ Сегмент данных: Addr_m 1 DW m 1 … Сегмент кода: … JMP addr_m 1 ; адрес перехода к ячейке памяти addr_m 1 … m 1:

Команда безусловного перехода JMP Переходы на разные метки (в зависимости от содержимого SI) Сегмент данных: addr DW m 1 DW m 2 Сегмент кода: cycl: MOV SI, 0 JMP addr[SI] ; адрес перехода в слове памяти addr+(SI) … MOV SI, 2 JMP cycl m 1: … m 2: ___________ Сегмент данных: addr DW m 1 Сегмент кода: LEASI, addr JMP NEAR PTR[SI] ; адрес перехода в ячейке памяти addr … ; модификатор NEAR PTR обязателен! m 1:

Команда безусловного перехода JMP Межсегментные переходы SEG_1 SEGMENT JMP FAR PTR m 2 ; здесь FAR обязательно m 1 LABEL FAR SEG_1 ENDS SEG_2 SEGMENT m 2 LABEL FAR ; здесь FAR обязательно JMP m 1 ____________ DATA SEGMENT addr_m 1 DD m 1 ; в поле addr_m 1 значение смещения и ; адреса сегмента метки m 1 DATA ENDS CODE_1 SEGMENT JMP m 1 CODE_1 ENDS CODE_2 SEGMENT m 1 LABEL FAR MOV AX, BX CODE_2 ENDS

Команда безусловного перехода JMP Косвенный регистровый межсегментный переход DATA SEGMENT addr_m 1 DD m 1 ; в поле addr_m 1 значение смещения и ; адреса сегмента метки m 1 DATA ENDS CODE_1 SEGMENT … LEABX, addr_m 1 JMP DWORD PTR [BX] … CODE_1 ENDS CODE_2 SEGMENT … m 1 LABEL FAR MOV AX, BX … CODE_2 ENDS

Процедуры Команды, осуществляющие работу с контекстом: CALL [модификатор] имя_процедуры – вызов процедуры (подпрограммы). Команда CALL, подобно JMP, передает управление по адресу с символическим именем имя_процедуры.

Читайте также:  Основы wi-fi

При этом процессор загружает в стек текущее значение регистра IP, если процедура имеет параметр NEAR, или значение CS, а потом значение IP, еслм процедура имеет параметр FAR.

После этого процессор загружает регистр IP (для NEAR) или пару регистров CS: IP (для FAR) адресом начала подпрограммы и выполняет команды процедуры до того момента, пока не встретит команду RET. Адрес возврата – это адрес команды, следующей после команды CALL. RET [число] – возвратить управление вызывающей программе.

Команда RET считывает адрес возврата из стека и загружает его в регистр CS и IP, тем самым возвращая управление на команду, следующую за командой CALL. [число] – необязательный параметр, обозначающий количество элементов, удаляемых из стека при возврате процедуры.

Процедуры Процедуру с атрибутом NEAR можно вызвать косвенно, используя переменную размером в слово: CALL WORD PTR [BX][SI] CALL WORD PTR variabl_name[BX] CALL MEM_WORD CALL WORD PTR ES: [BX] [SI] Процедуру с атрибутом FAR можно вызвать косвенно, используя переменную размером в двойное слово: CALL DWORD PTR [BX] CALL MEM_DWORD CALL WORD PTR SS: variabl_name [SI]

Условные переходы МП имеет 18 команд условного перехода, позволяющие проверить: отношение между операндами со знаком ( «больше-меньше» ); отношение между операндами без знака ( «выше-ниже» ); состояниями арифметических флагов ZF, SF, CF, OF, PF (но не AF).

Источниками такого условия могут быть: любая команда, изменяющая состояние арифметических флагов; команда сравнения CMP, сравнивающая значение двух операндов; состояние регистра СХ. Синтаксис: JX близкая_метка Х – модификатор, состоящий из одной, двух или трех букв.

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

Команда сравнения CMP Подобно команде SUB команда СМР вычитает операнд-источник из операнда-приемника и в зависимости от результата устанавливает или обнуляет флаги.

В отличие от команды SUB команда СМР не сохраняет результат вычитания.

Условие OF SF ZF CF Операнды без знака Источник < приемник x x 0 0 Источник = приемник x x 1 0 Источник > приемник x x 0 1 Операнды со знаком Источник < приемник 0/1 0 0 x Источник = приемник 0 0 1 x Источник > приемник 0/1 1 0 x

Перечень команд условного перехода для команды СМР оп_1 оп_2 Типы операндов Мнемокод команды условного перехода Любые JE Любые JNE Критерий условного перехода Значения флагов для осуществления перехода оп_1 = оп_2 ZF=1 оп_1 оп_2 ZF=0 Со знаком JL/JNGE оп_1 < оп_2 SFOF Со знаком JLE/JNG оп_1

Базово-индексная адресация со смещением Программа, которая обнуляет поле pole_m длиной n байт. DATA n EQU 50 pole_m DB n DUP(? ). CODE XOR BX, BX M 1: MOV pole_m[BX], 0 INCBX CMP BX, n JNE m 1 Exit: ________.

DATA mas DB DUP (? ).

CODE … CMP mas[SI], 5 ; сравнить очередной элемент массива с 5 JE eql ; переход, если элемент mas равен 5 JL low ; переход, если элемент mas меньше 5 JG grt ; переход, если элемент mas больше 5

Команды условного перехода и флаги Название флага Номер бита в FLAGS Команда условного перехода Значения флагa для осуществления перехода Флаг переноса CF 1 JC CF=1 Флаг четности PF 2 JP PF=1 Флаг нуля ZF 6 JZ ZF=1 Флаг знака SF 7 JS SF=1 Флаг переполнения OF 11 JO OF=1 Флаг переноса CF 1 JNC CF=0 Флаг четности PF 2 JNP PF=0 Флаг нуля ZF 6 JNZ ZF=0 Флаг знака SF 7 JNS SF=0 Флаг переполнения OF 11 JNO OF=0

Команды условного перехода и регистр СХ Архитектура МП предполагает специфическое использование многих регистров. Регистр СХ также имеет определенное функциональное назначение – он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов.

Синтаксис этой команды условного перехода: JCXZ метка_перехода – переход, если СХ=0; Эту команду очень удобно использовать при организации цикла и при работе с цепочками символов. Нужно отметить ограничение, свойственное команде JCXZ.

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

Организация циклов В МП существует три команды для управления циклом: LOOP метка_перехода – повторить цикл. Команда выполняет следующие действия: декремент регистра СХ; сравнение регистра СХ с нулем: если СХ > 0, то управление передается на метку перехода; если СХ = 0, то управление передается на следующую после LOOP команду.

LOOPE/ LOOPZ метка_перехода – повторить цикл пока СХ 0 или ZF=0. Команда выполняет следующие действия: декремент регистра СХ; сравнение регистра СХ с нулем; анализ состояния флага нуля ZF: если СХ > 0 и ZF=1, управление передается на метку перехода; если СХ = 0 или ZF=0, управление передается на следующую после LOOP команду.

Организация циклов LOOPNE/LOOPNZ метка_перехода – повторить цикл пока СХ 0 или ZF=1.

Команда выполняет следующие действия: декремент регистра СХ; сравнение регистра СХ с нулем; анализ состояния флага нуля ZF: если СХ > 0 и ZF=0, управление передается на метку перехода; если СХ = 0 или ZF=1, управление передается на следующую после LOOP команду. Недостаток команд организации цикла в том, что они реализуют только короткие переходы.

Команды управления флагами Команды STC (Se. T Carry flag – установить флаг переноса) и CLC (CLear Carry flag – обнулить флаг переноса) переводят флаг CF в состояние 0 или 1 соответственно.

Команда CMC (Complement Carry flag – обратить флаг переноса) переводит флаг CF в состояние 0, если он имел состояние 1, и наоборот. Команды STD (Se.

T Direction flag – установить флаг направления) и CLD (CLear Direction flag – обнулить флаг направления) переводят флаг CF в состояние 0 или 1 соответственно.

Команда CLI (clear interrupt flag – обнулить флаг прерываний) обнуляет флаг IF, что заставляет МП игнорировать маскируемые прерывания, инициируемые внешними устройствами системы. Команда SТI (set interrupt flag – установить флаг прерываний) переводит флаг IF в состояние 1, что разрешает МП реагировать на прерывания, инициируемые внешними устройствами системы.

Команды внешней синхронизации Команда HLT (halt – остановиться) переводит МП в состояние останова, при котором он находится на холостом ходу и не выполняет никакие команды.

Микропроцессор выходит из состояния останова только в том случае, если его заново инициировать или он получил внешнее прерывание, немаскируемое или маскируемое (если флаг IF=1).

Команда WAIT (wait – ожидать) также переводит МП на холостой ход, но при этом через каждые пять тактов он проверяет активность входной линии по имени TEST. Команда ESC (escape – убежать) заставляет МП извлечь содержимое указанного в ней операнда и передать его на шину данных.

Формат команды: ESC внешний_код, источник где внешний_код – 6 -битовый непосредственный операнд, а источник – регистр или переменная. Команда ESC часто используется для передачи команд математическому сопроцессору. Команда NOP (no operation – нет операции) не выполняет никакой операции, а только увеличивает значение указателя команд IP.

Источник: http://present5.com/sistemnoe-programmirovanie-lekciya-6-komandy-peredachi-upravleniya/

Большая Энциклопедия Нефти и Газа

Cтраница 1

Команды передачи управления, предназначенные для изменения порядка выполнения команд. Эти команды делятся на команды безусловного и условного перехода. Безусловная команда всегда передает управление в указанную в этой команде ячейку. Условная команда передает управление в какую-нибудь ячейку в зависимости от заданных условий.  [1]

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

Команды передачи управления ( или, что то же самое, перехода или ветвления) позволяют программисту в случае необходимости принимать альтернативные решения и отступать от нормального порядка выполнения последовательных команд программы. Передача управления в ту или иную точку программы может быть произведена одним из трех способов: условно, безусловно, а также условно с изменением содержимого некоторого счетчика.  [3]

Команды передачи управления играют особую роль в ЭВМ с хранимой в памяти программой. В обычном процессоре команды выполняются последовательно одна за другой в соответствии с их расположением в памяти ЭВМ.  [5]

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

Команды передачи управления обеспечивают переход из одной части программы в другую. Как показано в табл. 3.9, эти команды можно подразделить на три группы: команды безусловной передачи управления, команды условной передачи управления и команды управления циклами.  [7]

Команды передачи управления могут заставить микропроцессор 8088 перейти к другой части программы безусловно, при выполнении условия или при повторении блока команд – цикла.  [8]

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

Команды передачи управления предназначены для организации перехода в программе. Существует четыре класса таких команд: безусловная передача управления, условная передача управления, управление циклами, команды прерываний.  [10]

Команда передачи управления ( jump ( branch) instruction) определяет передачу управления новой последовательности команд выполняемой программы.  [11]

Команды передачи управления прерывают естественный порядок выполнения команд и однозначно определяют адрес следующей команды. При выполнении команд передачи управления результат предыдущего действия сохраняется.  [12]

Команды передачи управления делятся на условные и безусловные.  [13]

Команды передачи управления бывают двух типов: условные и безусловные. Команды условной передачи управления определяют состояние одного из четырех признаков регистра признаков и в зависимости от этого осуществляют переход к той или иной части программы.  [14]

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

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

Модификация программного счетчика может производиться либо загрузкой в него нового значения, либо сложением его со смещением, указанным в команде.  [15]

Страницы:      1    2    3    4

Источник: http://www.ngpedia.ru/id96220p1.html

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

Поиск Лекций

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

1) безусловным, то есть произойдет переход не к следующей по порядку команде, а к указанной;

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

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

JMP метка – заставляет процессор продолжать выполнение программы с места, отмеченного меткой, которая указывается в самой команде JMP (jump)

Команды условного перехода:

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

Для анализа соотношения между операндами перед командой условного перехода должна быть выполнена команда сравнения операндов:

CMP операнд1, операнд2

Эта команда, как и команда SUB, выполняет вычитание операндов (из операнд1 вычитается операнд2), в результате выполнения вычитания (то есть в результате выполнения этой команды процессор выставляет флаги в регистре флагов) выставляет необходимые флаги, НО не записывает полученный результат вычитания на место первого операнда. По результатам анализа флагов возможно произвести необходимый условный переход. Существуют следующие команды условного перехода, выполняемые после команды CMP:

Типы операндов Команда условного перехода Критерий условного перехода Значение флагов для перехода
Любые JE операнд1 = операнд2 ZF=1, т.е. ЦП видит команду CMP, он находит разность двух операндов и выставляет флаги. Потом он смотрит следующую команду. Если стоит JE , то ЦП смотрит на флаг ZF. Если этот флаг равен не 1, а нулю, то ЦП перейдет к рассмотрению следующей команды.
Любые JNE операнд1 операнд2 ZF=0
Со знаком JL или JNGE операнд1 < операнд2 SFOF
Со знаком JLE или JNG операнд1 операнд2 SF=OF и ZF=0
Со знаком JGE или JNL операнд1 => операнд2 SF=OF
Без знака JB или JNAE операнд1 < операнд2 CF=1
Без знака JBE или JNA операнд1 операнд2 CF=0 и ZF=0
Без знака JAE или JNB операнд1 => операнд2 CF=0

Буквы в обозначениях команд имеют следующие значения:

Читайте также:  Датчик массового расхода воздуха

J – jump, e – equal (равно), n – not (нет), g – greater (больше), l – less (меньше), а – above (выше, в смысле больше), b – below (ниже, в смысле меньше).

Например, JL или JNGE = перейти, если операнд1 меньше операнда2, ИЛИ перейти, если не выполняется условие, что операнд1 больше или равен операнда2.

Команды условного перехода имеют следующий формат:

Jcc метка

где cc – код конкретного условия, анализируемого командой.

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

CMP AL, AH ; сравниваем значения AL и AH

JE metka1 ; если равны AL=AH, то переход

;к команде перед которой стоит metka1

JL metka2

JG metka3

Другим вариантом команд условного перехода являются команды, которые просто анализируют состояние определенных флагов процессора. Обозначение этих команд состоит также из символа “J” (jump) и одной буквы, отражающей название флага, перед которой может быть вставлен символ отрицания “n” (not).

Ниже приведен список команд условного перехода, использующих анализ флагов процессора.

Название флага Номер бита в регистре eflags/flags Команда условного перехода Значение флага для осуществления перехода
Переноса CF JC CF = 1
Четности PF JP PF = 1
Нуля ZF JZ ZF = 1
Знака SF JS SF = 1
Переполнения OF JO OF = 1
Переноса CF JNC CF = 0
Четности PF JNP PF = 0
Нуля ZF JNZ ZF = 0
Знака SF JNS SF = 0
Переполнения OF JNO OF = 0

Например:

JC metka ; если флаг переноса равен 1, то переход к команде,

перед которой стоит metka

Кроме того, есть еще две команды, предназначенные специально для работы с регистром CX/ECX (предназначены для организации циклов с использование регистров CX/ECX в качестве счетчика):

JCXZ metka (Jump if CX is Zero) – если регистр CX содержит ноль, то переход к команде, перед которой стоит metka ;

JECXZ metka (Jump if ECX is Zero) – переход, если регистр ECX содержит ноль.

Источник: https://poisk-ru.ru/s21351t2.html

Группа команд передачи управления

⇐ ПредыдущаяСтр 2 из 36Следующая ⇒

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

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

Название команды Мнемокод Операция
Длинный переход в полном объеме ПП LJMP ad16 (PC) ad16
Абсолютный переход внутри страницы в 2 Кб AJMP ad11 (PC) (PC) + 2, (PC0-10) ad11
Короткий относительный переход внутри страницы в 256 байт SJMP rel (PC) (PC) + 2, (PC) (PC) + rel
Косвенный относительный переход JMP @A+DPTR (PC) (A) + (DPTR)
Переход, если аккумулятор равен нулю JZ rel (PC)(PC)+2, если (A)=0, то (PC)(PC)+rel
Переход, если аккумулятор не равен нулю JNZ rel (PC)(PC)+2, если (A)≠0, то (PC)(PC)+rel
Переход, если перенос равен единице JC rel (PC)(PC)+2, если (С)=1, то (PC)(PC)+rel
Переход, если перенос равен нулю JNC rel (PC)(PC)+2, если (С)=0, то (PC)(PC)+rel
Переход, если бит равен единице JB bit, rel (PC)(PC)+3, если (b)=l, то (PC)(PC)+rel
Переход, если бит равен нулю JNB bit, rel (PC)(PC)+3, если (b)=0, то (PC)(PC)+rel
Переход, если бит установлен, с последующим сбросом бита JBC bit, rel (PC) (PC) + 3, если (b)=1, то (b) 0 и (PC) (PC) + rel
Декремент регистра и переход, если не нуль DJNZ Rn, rel (PC) (PC) + 2, (Rn) (Rn) – 1, если (Rn) ≠ 0, то (PC) (PC) + rel
Декремент прямоадресуемого байта и переход, если не нуль DJNZ ad, rel (PC) (PC) + 2, (ad) (ad) – 1, если (ad) ≠ 0, то (PC) (PC) + rel
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно CJNE A, ad, rel (PC) (PC) + 3, если (A) ≠ (ad), то (PC) (PC) + rel, если (A) < (ad), то (C) 1, иначе (C) 0
Сравнение аккумулятора с константой и переход, если не равно CJNE A, #d, rel (PC) (PC) + 3, если (A) ≠ #d, то (PC) (PC) + rel, если (A) < #d, то (C) 1, иначе (С) 0
Сравнение регистра с константой и переход, если не равно CJNE Rn, #d, rel (PC) (PC) + 3, если (Rn) ≠ #d, то (PC) (PC) + rel, если (Rn) < #d, то (C) 1, иначе (С) 0
Сравнение байта в РПД с константой и переход, если не равно CJNE @Ri, d, rel (PC) (PC) + 3, если ((Ri)) ≠ #d, то (PC) (PC) + rel, если ((Ri)) < #d, то (C) 1, иначе (C) 0
Длинный вызов подпрограммы LCALL adl6 (PC) (PC) + 3, (SP) (SP) + 1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC) ad16
Абсолютный вызов подпрограммы в пределах страницы в 2 Кб ACALL ad11 (PC) (PC) + 2, (SP) (SP) + 1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC0-10) ad11
Возврат из подпрограммы RET (PC8…15) ((SP)), (SP) (SP) – 1, (PC0…7) ((SP)), (SP) (SP) – 1
Возврат из подпрограммы обработки прерывания RETI (PC8…15) ((SP)), (SP) (SP) – 1, (PC0…7) ((SP)), (SP) (SP) – 1
Пустая операция NOP (PC) (PC) + 1

Мож­но выделить три разновидности команд ветвления по разрядности ука­зываемого адреса перехода.

Длинный переход.Переход по всему адресному пространству ПП. В команде содержится полный 16-битный адрес перехода (ad 16). Трехбайтные команды длинного перехода содержат в мнемокоде букву L (Long).

Всего существует две такие команды: LJMP — длинный пере­ход и LCALL — длинный вызов подпрограммы.

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

Абсолютный переход.Переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad 11).

Команды абсолютного перехода имеют формат 2 байта. Начальная буква мнемокода — A (Absolute).

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

Относительный переход.

Короткий относительный переход позволяет передать управление в пределах –128 ± 127 байт относительно адреса следующей команды (команды, следующей по порядку за командой от­носительного перехода).

Существует одна команда безусловного короткого перехода SJMP (Short). Все команды условного перехода исполь­зуют данный метод адресации. Относительный адрес перехода (rel) содержится во втором байте команды.

Косвенный переход.Команда JMP @А + DPTR позволяет передавать управление по косвенному адресу. Эта команда удобна тем, что предо­ставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы.

Условные переходы.Развитая система условных переходов предоставляет возможность осуществлять ветвление по следующим условиям аккумулятор содержит нуль (JZ); содержимое аккумулятора не равно нулю (JNZ); перенос равен единице (JC); перенос равен нулю (JNC); адресуемый бит равен единице (JB); адресуемый бит равен нулю (JNB).

Для организации программных циклов удобно пользоваться коман­дой DJNZ. В качестве счетчика циклов может использоваться не только регистр, но и прямоадресуемый байт (например, ячейка РПД).

Все команды данной группы, за исключением CJNE и JBC, не ока­зывают воздействия на флаги. Команда CJNE устанавливает флаг С, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг С в случае перехода.

Работа с подпрограммами

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

Для обращения к подпрограммам необходимо ис­пользовать команды вызова подпрограмм (LCALL, ACALL), относящиеся к группе команд передачи данных.

Эти команды в отличие от команд перехода (LJMP, AJMP) сохраняют в сте­ке адрес возврата в основную программу. Для возврата из подпрограм­мы необходимо выполнить команду RET.

Команда RETI отличается от команды RET тем, что разрешает прерывания обслуженного уровня.

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

Для обращения к стеку используются команды PUSH (запись в стек) и POP (извлечение из стека), относящиеся к группе команд передачи данных. Граница заполнения стека определяется содержимым указателя стека SP (при включении микроконтроллера содержимое SP равно 07).

Система команд микроконтроллера КР1816ВЕ51 (МК51) содержит 111 базовых команд, которые удобно разделить по функциональному признаку на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами.

Большинство команд имеют формат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс.

Состав операндов МК51 включает в себя операнды четырех типов: биты, 4-битные цифры, байты и 16-битные слова.

Имеется также возможность адресации отдельных бит блока регистров специальных функций и портов. Для адресации бит используется прямой 8-битный адрес (bit). Четырехбитные операнды используются только при операциях обмена (команды SWAP и XCHD).

8-битным операндом может быть ячейка памяти программ или данных (резидентной или внешней), кон­станта (непосредственный опе­ранд), регистры специальных функций (РСФ), а также порты ввода/вывода. Порты и РСФ адре­суются только прямым способом. Байты памяти могут адресоваться также и косвенным образом через адресные регистры (RO, Rl, DPTR и PC).

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

Правила записи программ на языке ассемблера

Исходный текст программы на языке ассемблера имеет определенный формат. Каждая команда и директива представляет собой строку:

МЕТКА ОПЕРАЦИЯ ОПЕРАНД(Ы) КОММЕНТАРИЙ

Поля могут отделяться друг от друга произвольным числом пробелов и табуляцией.

Метка

В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченная команда или операнд. Метка представляет собой буквенно-цифровую комбинацию, начинающуюся с буквы. Используются только буквы латинского алфавита. Ассемблер A51 допускает использование в метках символа подчеркивания (_). Метка всегда завершается двоеточием (:).

Директивы ассемблера не преобразуются в двоичные коды, а потому не могут иметь меток. Исключение составляют директивы резервирования памяти и определения данных (DS, DB, DW). У директив, определяющих символические имена, в поле метки записывается определяемое символическое имя, после которого двоеточие не ставится.

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

Операция

В поле операции записывается мнемоническое обозначение команды или директивы ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например: MOV – move – переместить, JMP – jump – перейти, DB – define byte – определить байт.

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

Операнды

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

Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом (MOV A, #15) или символическим именем (ADDC A, #OPER2) с обязательным указателем префикса непосредственного операнда (#).

Прямой адрес операнда может быть задан мнемоническим обозначением (IN A, P1), числом (INC 40), символическим именем (MOV A, MEMORY). Указанием на косвенную адресацию служит префикс @.

В командах передачи управления операндом может являться число (LCALL 0135H), метка (JMP LABEL), косвенный адрес (JMP @A) или выражение (JMP $ – 2, где $ – текущее содержимое счётчика команд).

Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется суффикс (буква, стоящая после числа): B – для двоичной, Q – для восьмеричной, D – для десятичной и H – для шестнадцатиричной. Число без суффикса по умолчанию считается десятичным.

Комментарий

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

Источник: https://lektsia.com/3x5fb5.html

Ссылка на основную публикацию
Adblock
detector