Цифровые устройства и микропроцессор. Программирование микроконтроллеров семейства MCS-51. Жаринов О.О. - 17 стр.

UptoLike

Составители: 

17
Команды безусловного перехода позволяют продолжить выполне-
ние программы с нового адреса, однозначно определенного в команде.
Три команды этой подгруппы – SJMP, AJMP, LJMP – отличаются толь-
ко максимальной длиной перехода: например, инструкция SJMP позво-
ляет осуществлять «короткие» переходы (не более 128 адресов вверх и
не более 127 вниз относительно места данной команды в программе), а
команда AJMP – уже в пределах объема программы в 2кБайта. Команда
LJMP позволяет осуществлять «длинные» переходы, но работает толь-
ко с внешней памятью программ! Во избежание ошибок при расчете
адреса перехода всегда нужно помнить, что количество адресов, зани-
маемое каким-либо фрагментом программы, в общем случае не совпа-
дает с количеством ассемблерных инструкций в этом фрагменте, по-
скольку есть 2 и 3-байтовые команды.
Следует учитывать, что при вводе команды на языке ассемблера ад-
рес перехода указывается в явном виде: т. е. какой адрес записан в мне-
мокоде, на тот и будет осуществляться переход. Но при коррекции шес-
тнадцатеричного кода операции (это суть второй байт команды) следу-
ет вводить число, равное количеству адресов, на которое надо перейти
вперед или назад относительно данного места. Для перехода «назад»
второй байт команды представляется в дополнительном коде. Эту осо-
бенность поясняет следующий пример.
Пример
Пусть команда SJMP 00AB находится по адресу 00A1. Непосред-
ственно из ассемблерной инструкции видно, что команда выполняет
переход по адресу 00AB. А два байта кода данной операции в шестнад-
цатеричной записи суть 80 08. Здесь первый байт, 80, – это код команды
SJMP, а 08 показывает, что переход осуществится на 8 ячеек вперед (в
MCS-51 отсчет всегда начинается с адреса команды, непосредственно
следующей за командой перехода). Поскольку SJMP 00ABh является двух-
байтовой командой, то отсчет и надо начинать с адреса 00А1 + 0002 =
= 00А3. Тогда, с учетом равенства 00А3 + 08 = 00АВ, взаимосвязь адре-
са в ассемблерной инструкции и кода операции становится очевидной.
Если же было бы нужно осуществить переход на 8 адресов назад, то
число минус 8 в коде операции следовало бы представить в дополни-
тельном коде: –08h=F8h, т. е. в данном случае ассемблерной инструк-
ции SJMP 009В будет соответствовать машинный код 80 F8.