КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Команды передачи управленияГруппа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм (табл.23).
Таблица 8.
Команды безусловного перехода: LJMP ad16 (Long Jump - длинный переход) – длинный абсолютный переход по всему адресному пространству ПП. В трехбайтовой команде содержится полный 16-битный адрес перехода (ad16), позволяющий обращаться к любой ячейке памяти в пределах 64К. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающие меньше места в памяти. AJMP ad11 (Absolute Jump – абсолютный переход) – абсолютный переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad11). Команды абсолютного перехода имеют формат 2 байта, при этом второй байт команды содержит 8 младших разрядов адреса (А7-А0), которые адресуют 256 байт памяти, а 3 старших разряда (А10-А8) находятся в первом байте вместе с кодом операции. Для изменения адреса перехода необходимо выбирать команду с другим кодом операции. Всего имеется 8 команд типа AJMP. При выполнении команды в вычисленном адресе следующей по порядку команды ((РС)= (PC) + 2) 11 младших бит заменяются на ad11 из тела команды абсолютного перехода. SJMP rel (Short Jump– короткий переход) - относительный переход позволяет передать управление в пределах -128 ÷ +127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Формирование адреса относительного перехода (rel) осуществляется путем сложения базового адреса с адресом в поле операнда команды. В качестве базового адреса используется содержимое программного счетчика, а адрес в поле операнда команды представляет собой восьмиразрядное смещение rel(relative - относительный). Число rel интерпретируется командой как целое со знаком, представленное в дополнительном коде. Диапазон его представления -128 ÷ +127. При определении числа rel следует учесть, что программный счетчик указывает на следующую, подлежащую выполнению, команду. Относительный переход широко используется в командах передачи управления, так как по сравнению с абсолютными переходами они придают программе важное качество перемещаемости. JMP @A + DPTR – косвенный переход по адресу, представляющим собой сумму содержимого аккумулятора A и регистра DPTR. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы. При этом в регистре DPTR находится постоянная часть адреса, в аккумуляторе – вычисляемая. Команды условного перехода имеют структуру Jump(условие) bit, rel или Jumр(условие), rel и позволяют осуществлять переход при выполнении следующих условий (переход если): - JZ— аккумулятор содержит нулевое значение; - JNZ — аккумулятор содержит не нулевое значение - JC — бит переноса С установлен; - JNC — бит переноса С не установлен; - JB — прямоадресуемый бит равен 1 - JNB — прямоадресуемый бит равен 0; - JBC — прямоадресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды. Все команды условного перехода содержат короткий относительный адрес, т. е. переход может осуществляться в пределах -128... +127 байт относительно следующей команды, аналогично команде SJMP. Команды вызова подпрограмм и возврата из них: LCALL ad16 – длинный вызов подпрограммы в пределах полного адресного пространства 64К. Трехбайтовая команда аналогичная команде LJMP. ACALL ad11 – двухбайтовая команда вызова подпрограммы в пределах адресного пространства 2К. Как и для команды AJMP, имеется 8 команд типа ACALL. RET – безадресная команда возврата из подпрограммы. RETI - безадресная команда возврата из подпрограммы обработки прерывания. Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг C, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг C в случае перехода.
|