Перейти к метке DEST, если содержимое ячейки внутренней памяти с адресом OPER1 меньше содержимого ячейки внутренней памяти с адресом OPER2.



Типовые задачи программирования

Программирование МК весьма разнообразно вследствие крайне широкого использования МК для управления. Однако почти всегда конкретная программа может быть разбита на ряд типовых задач, для которых уже известно, по крайней мере, теоретическое решение. Поэтому ниже приводятся фрагменты таких типовых программ. Естественно, что решать эти задачи можно различными способами и здесь приводится только один из них.

Арифметические и логические операции

Система команд содержит следующие арифметические и логические операции:

ADD - сложение двух операндов, один из которых в А, и помещение результата а А,

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

SUBB - вычитание двух чисел с учетом переноса.

ANL - операция "логическое И" операнда в А с маской. Побитная операция. В результате обнуляются те биты числа, в которых в маске был 0. Остальные биты не меняются. Результат - в А.

ORL - операция "логическое ИЛИ" операнда в А с маской. Побитная операция. В результате устанавливаются в 1 те биты числа, в которых в маске была 1. Остальные биты не меняются. Результат - в А.

XRL - операция "ИСКЛЮЧАЮЩЕЕ ИЛИ" операнда в А с маской. Побитная операция. В результате устанавливаются в 1 те биты числа, в которых в маске и в числе были разные биты, и устанавливаются в 0 те биты числа, в которых в маске и в числе были одинаковые биты.

Сложить содержимое ячейки внутренней памяти OPER1 и регистра R0, сумму поместить в ячейку внутренней памяти SUM.

Распределение ресурсов: можно использовать прямую адресацию ячеек в операциях суммирования и пересылки. Для суммирования задействован регистр А.

Name SUM

Beg: mov a,OPER1 ; перекопирование первого операнда в А

add a,R0 ; операция суммирования с R0, результат обратно в А

mov SUM,a ; перекопирование результата в ячейку SUM

END

Сложить содержимое регистра R0 и регистра R1, сумму поместить в ячейку внутренней памяти SUM.

Распределение ресурсов: можно использовать прямую адресацию ячеек в операциях суммирования и пересылки. Для суммирования задействован регистр А.

Name SUM1

Beg: mov a,R0 ; перекопирование первого операнда в А

Add a,R1 ; операция суммирования с R0, результат обратно в А

mov SUM,a ; перекопирование результата в ячейку SUM

END

Вычесть из содержимого ячейки First внешней памяти данных содержимое внутренней ячейки с адресом 35Н, результат поместить во вторую ячейку внешней памяти Second.

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

Name SUBTR

beg: mov dptr, #First ;загрузка в указатель адреса первой ячейки с операндом

mov R0, #35h      ;загрузка в R0 адреса второй ячейки с операндом

movx a, @dptr     ;пересылка первого операнда в А

subb a,@R0         ;вычитание из первого операнда (в А) второго операнда (в ячейке с адресом в R0)

mov dptr, #Second ;загрузка в указатель адреса ячейки, куда надо сохранить результат

movx @dptr,a      ;пересылка результата в ячейку

END

Команда Операция Что оценивается

JZ rel    переход, если A=0 только А

JNZ rel переход, если A??0 только А

DJNZ <byte>, rel   декремент и переход, если не нуль   

CJNE A, <byte>, rel переход, если A??<byte> 

CJNE <byte>#data,rel    переход, если <byte>?? #data   

JC rel    переход, если C=1   

JNC rel переход, если C=0   

JB bit, rel переход, если bit=1 

JNB bit, rel    переход, если bit=0 

JBC bit, rel    переход, если bit=1; очистка этого бита  

Все условные переходы определяют адрес назначения как относительное смещение (rel) с длиной перехода, находящейся в пределах от -128 до +127 байт (относительно инструкции, следующей за условным переходом).

В PSW отсутствует флаг нуля, поэтому инструкции JZ и JNZ проверяют условие "равен нулю" тестированием данных в аккумуляторе.

Инструкция DJNZ (Decrement and Jump if Not Zero) используется для организации циклов.

Инструкция CJNE (Compare and Jump Not Equal) также может использоваться для управления циклами. Другим применением данной инструкции является проверка условий "больше чем", "меньше чем". Два байта в поле операндов представлены как "беззнаковое целое". Если первый операнд меньше, чем второй, то бит переноса "С" устанавливается в "1"; если больше или равен, то флаг "С" очищается.

Перейти к метке DEST, если содержимое ячейки внутренней памяти с адресом OPER1 меньше содержимого ячейки внутренней памяти с адресом OPER2.

Распределение ресурсов: Для использования операций перехода необходимо использовать команду, которая бы формировала соответствующие флажки в результате операции. Наиболее подходящая для этого команда SUBB - вычитания второго операнда из первого, расположенного в А. Если результат отрицательный, то устанавливается флажок переноса С=1, в противном случае он очищается. Кроме того, перед оператором вычитания надо загрузить первый операнд в А. В системе команд существуют 2 операции, проверяющие состояние флажка С: JC ADR и JNC ADR. Первая осуществляет переход, когда С=1, вторая - когда С=0. Так как нам надо проверять условие С=1, то надо использовать первую команду.

NAME SUBTR

Beg: mov a,OPER1 ;пересылка содержимого ячейки памяти в А

subba,OPER2 ;вычитание из А содержимого второй ячейки памяти.

jcDEST ;переход на метку, если С=1

END


Дата добавления: 2020-04-25; просмотров: 112; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!