Обработка результатов ввода сигналов с параллельного порта

 

1. Инверсия

А:= not B; {если B = 01011100, то A = 10100011}

2. Логическое “И” (логическое умножение, конъюнкция)

А:= B and C;

Результат работы для каждого бита определяется таблицей истинности:

i = 0. . 7

 

 

Ai Bi Ci

 

Ai = Bi*Ci = Bi Λ Ci

 

 

Пример: В = 01101100

С = 00100000

А := B and C

А = 00100000

 

Логическое “И” используют для выделения нужных разрядов по маске. Один из операндов играет роль маски выделения, где в разрешенных разрядах должны стоять единицы.

3. Логическое “ИЛИ” (логическое сложение или дизъюнкция)

А := B or C;

i = 0. . 7

Ai Bi Ci

 

 

Аi:= Bi + Ci;

 

 

4. Исключающее “ИЛИ” (операция несовпадения, сложение с блокировкой переноса)

А:= B хor C;

Операцию удобно использовать как операцию несовпадения.

i = 0. . 7

Ai Bi Ci

C := А and B

C := А хor B

{var A,B,C: byte или var A,B,C: shortint (если работаем с двухбайтными переменными и регистрами)}

 

5. Операция сдвига (левый сдвиг)

C: = А shl B; {A – операнд, B – число сдвигов влево, shl (Shift Left) - левый сдвиг}

Разряды выходящие влево за разрядную сетку теряются, а освободившиеся разряды справа заполняют нулями.

A: = $AA; {1010’1010}

B: = A shl 1; {0101’0100}

Writeln (B); {8410}

Сокращенное умножение на 2

Если в результате сдвига влево код не выходит за разрядную сетку, то в результате сдвига число умножается на степень двойки. Степень равна числу сдвигов.

Пример: 0000’0101 = 510

shl 1

0000’1010 = 1010

При отсутствии арифметического процессора, умножение сдвигами может экономить машинное время в десятки раз.

 

6. Операция сдвига вправо

А:= B shr C; {B – исходный код, C - число сдвигов, shr (Shift Right) - правый сдвиг}

Выходящие за разрядную сетку разряды теряются, а освободившиеся слева – заполняются нулями. Каждый сдвиг вправо уменьшает число в два раза.