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

Страницы работы

Фрагмент текста работы

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

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

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

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

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

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

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

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

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

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

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

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

Name  SUM

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

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

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

END

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

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

Name  SUM1

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

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

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

END

2.1.3.  Вычесть из содержимого ячейки 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) также может использоваться для управления циклами. Другим применением данной инструкции является проверка условий "больше чем", "меньше чем". Два байта в поле операндов представлены как "беззнаковое целое

Похожие материалы

Информация о работе