Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
63
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 48

Железная логика

Сдвиги влево и вправо

Сдвиг — одна из тех операций обработки регистров, которые выполняют все процессоры. В Паскале тоже предусмотрены две такие операции с числами: сдвиг влево (SHL) и сдвиг вправо (SHR).

Операция левого сдвига (рис. 109) перемещает все биты слова на заданное число позиций влево, при этом младшие биты заполняются нулями, а старшие теряются, например:

N:= 3;

{ 3

=

00000011

}

 

 

 

Writeln (N shl 1);

{ 6

=

00000110

}

 

 

 

Writeln (N shl 2);

{ 12 = 00001100

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Старший бит

 

 

 

 

 

 

 

 

 

 

В младший бит

1

 

0

0

1

1

 

0

1

1

теряется

 

 

заносится ноль

 

 

 

 

 

 

 

 

 

 

0 0 1 1 0 1 1 0

Рис. 109 – Сдвиг байта на один разряд влево

Операция правого сдвига (рис. 110) перемещает все биты слова на заданное число позиций вправо. При этом старшие биты заполняются нулями, а младшие теряются.

N:= 3;

{ 3

= 00000011

}

Writeln (N shr 1);

{

1

=

00000001

}

Writeln (N shr 2);

{

0

=

00000000

}

 

 

 

 

 

 

В старший бит

1

0

0

1

1

0

1

1

Младший бит

заносится ноль

 

 

 

 

 

 

 

 

теряется

 

 

 

 

 

 

 

 

0 1 0 0 1 1 0 1

Рис. 110 – Сдвиг байта на один разряд вправо

Совместив сдвиг с логическими операциями, можно исследовать отдельные биты слова. Перед вами булева функция TestBit, принимающая два параметра: ARG — число, в котором проверяется состояние некоторого бита, и BIT — номер

375

Глава 48

Железная логика

этого бита. Функция возвращает TRUE, если проверяемый бит содержит единицу, и FALSE в противном случае.

function TestBit (arg: longint; bit : byte): Boolean;

begin

TestBit := (arg and (1 shl bit)) <> 0

end;

Итоги

Процессоры построены из триггеров. Триггер – это элемент с двумя устойчивыми состояниями, которые можно трактовать либо как булевы значения TRUE и FALSE, либо как числа 0 и 1.

Для хранения чисел и других данных, триггеры соединены в регистры. Обычно регистр состоит из 8, 16, 32 или 64 битов.

В Паскале есть средства для работы с регистрами – это логические операции и сдвиги. Они трактуют числа как массивы битов.

Аслабо?

А) Напишите программу для исследования операций сдвига (подобную программе P_48_1).

Б) Наряду с рассмотренными здесь обычными сдвигами, в процессорах заложены операции циклического (кругового) сдвига. При таком сдвиге (рис. 111) выдвигаемый бит не теряется, а попадает соответственно в младший бит (при сдвиге влево) или в старший бит (при сдвиге вправо).

1 0 0 1 1 0 1 1

0 0 1 1 0 1 1 1

Рис. 111 – Циклический сдвиг влево

В Паскале нет операций циклического сдвига. Напишите функции для циклического сдвига слова влево и вправо. Подсказка: перед сдвигом каждого бита проверяйте состояние теряемого бита, а затем восстанавливайте его в младшем или старшем разряде.

376

Соседние файлы в папке delphi