НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 115116117118119120121 ... 159


tfsc STATUS, Z goto no change xorwf

ПРОВЕРКА ДИАПАЗОНА

Речь идет о коде, который проверяет попадание значения переменной Num в диапазон значений и при положительном ответе переходит к метке in range.

Movf

Num, w

addlw

255 - hi lim

, Прибавление разности

255 - hi lim

addlw

hi lim - lo lim + 1

, Прибавление значения , диапазона

ширины

btfsc

STATUS, С

, Если в итоге перенос, , не попало в диапазон

то значение

goto

in range

ПРЕОБРАЗОВАНИЕ СИМВОЛОВ ASCII В ВЕРХНИЙ РЕГИСТР

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

ToUpper addlw Addlw btfss

addlw addlw return

255 - 2 z - a + 1 STATUS, С

h* 20

A

Проверка попадания в диапазон значений кодов нижнего регистра Если перенос установлен, то нижний регистр Если переноса нет, восстанавливается символ Добавление А для восстановления символа

ПЕРЕСТАНОВКА СОДЕРЖИМОГО РЕГИСТРА И РАБОЧЕГО РЕГИСТРА W

Ниже представлен быстрый способ перестановки содержимого регистра и регистра w, не задействуя временный регистр.

xorwf Reg, f xorwf Req, w

xo rwf

Reg, f

w = w, Reg = Reg " w

w = w "( Reg " w), Reg = Reg

w = Reg, Reg = Reg " w

w - Reg, Reg = Reg " w " Reg

w = Reg w = Reg

Если биты отличаются, новый код сохраняется как старый (old)



ПЕРЕСТАНОВКА СОДЕРЖИМОГО ДВУХ РЕГИСТРОВ

Ниже приведена подпрограмма, позволяющая быстро поменятьмес-тами содержимое двух регистров:

movf X,

subwf Y,

addwf X,

subwf Y,

w = X = w =

(Y (Y

X) X)

СРАВНЕНИЕ И ПЕРЕСТАНОВКА, ЕСЛИ Y < X

Эта подпрограмма удобна для пузырьковой сортировки:

movf

X, w

subwf

Y, w

, Y >= X

btfsc

STATUS, С

, Если перенос установлен, то да

goto

$ + 2

, Не переносить содержимое

addwf

X, f

, В противном случае X = X + (Y

subwf

Y, f

, X = Y - (Y - X)

- X)

ПОДСЧЕТ ЧИСЛА 1 В БАЙТЕ

Код, представленный ниже, является оптимизированным решением классической проблемы подсчетачист 1 в байте {\2коиглщ / 12 циклов). Речь идет о разработке, выполненной Дмитрием Кирашовым (Dmitry Kirashov).

, © 199

3 by Dmitry

Klrashov

X, w

, X содержит байт

andlw

0x55

, -a-c-e-g

subwf

X, f

, ABCDEFGH, где AB = a + b и t Д

movwf

andlw

0x33

--CD--GH

addwf

X, f

X, f

, OABOOEFO

, OOCDOOGH

addwf

X f

, OABOOEFO

, OOCDOOGH

X, f

, OABCD OEFGH

swapf

X, w

addwf

X, w

andlw

OxOF

, Нисло 1 в регистре w



ГЕНЕРАЦИЯ БИТА ЧЕТНОСТИ ДЛЯ БАЙТА

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

swapf X, W

xorwf X, f

rrf X, w

xorwf X, f

btfsc X, 2

incf X f

УДЕРЖАНИЕ ПЕРЕМЕННОЙ ВНУТРИ ДИАПАЗОНА

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

movlw Constant , О <= Temp <= Constant

subwf Temp, w

btfsc STATUS, С

subwf Temp, f

ПЕРЕСТАНОВКА ЧЕТНЫХ И НЕЧЕТНЫХ БИТОВ

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

, © 1998 by Dmitry Kirashov

movwf X , Сохранение поступающего байта

, во временном регистре W = X = ABCDEFGH andlw 0x55 , w = OBODOFOH

addwf X, f , X = ABCDEFGH + OBODOFOH

rrf X f , X = (ABCDEFGH + OBODOFOH) >> 1

addwf X, w , w = BADCFEHG + OBODOFOH

ПОБИТОВЫЕ ОПЕРАЦИИ

Подпрограмма установки бита путем выполнения операции логического И двух других битов имеет следующий вид:



0 ... 115116117118119120121 ... 159