Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_КП_1801.doc
Скачиваний:
9
Добавлен:
27.08.2019
Размер:
2.81 Mб
Скачать

3. Определение четности чисел

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

3.1. Определение чисел кратных двум

Для двоичной системы четность можно еще определить по наличию 1 в младшем разряде исследуемого слова , т.е. если там записана 1, то число нечетное, если там 0 – четное:

  • число 1563258 = 1.101.110.011.010.1012 – нечетное, т.к. в младшем разряде записана 1;

  • число 1245648 = 1.010.100.101.110.1002 – четное, т.к. в младшем разряде записан 0.

Существует несколько способов проверить содержимое младшего бита. Один из вариантов ‑ проверить наличие младшего бита логической операцией и анализировать содержимое флага нулевого результата:

Адрес

Мнемокод

Комментарий

1000

BIT #1, @R0

Умножить логически на 1 слово, адресуемое через R0

1004

BNE LBL1

Если в младшем 1, перейти на метку LBL1

1006

BEQ LBL2

Если в младшем 0, перейти на метку LBL2

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

3.2. Определение числа единиц в числе

К сожалению, флаговый регистр К1801ВМ1 не содержит флага четности и проверить операнд способом пригодным для КР580ВМ80 невозможно:

Адрес

Мнемокод

Комментарий

0800

ANA A

Умножить логически аккумулятор на себя

0801

JPO LBL1

Если нечетное, перейти на метку LBL1

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

Адрес

Метка

Мнемокод

Комментарий

1000

MOV #21, R1

Установить счетчики в начальное состояние

CLR R2

1006

STRT

DEC R1

Проверить количество посчитанных битов

BEQ STP

Если все, то остановиться

ROR R0

Сдвинуть вправо

BCC STRT

Если бит содержит 0, перейти с следующему

INC R2

Иначе увеличить счетчик единиц

BR STRT

И перейти к следующему биту

1050

STP

HALT

Остановиться

Результаты выполнения данной программы следующие:

R0 – исходное число, сдвинутое на 1 влево. Чтобы исходное число осталось после выполнения програмы без изменения необходимо выполнить команду ROR R0 еще один раз.

R1 – счетчик битов. Становиться нулевым.

R2 – счетчик единичных битов.