- •Введение
- •1. Краткие теоретические сведения по ассемблеру мп к1801вм1
- •1.1. Регистровая модель
- •1.2. Адресное пространство
- •1.3. Методы адресации
- •1.3.1. Методы прямой адресации
- •1.3.2. Методы косвенной адресации
- •1.3.3. Методы адресации, использующие в качестве рон r7
- •2. Алгоритмы сортировки
- •2.1. Оценка алгоритма сортировки
- •2.2. Классификация алгоритмов сортировки
- •2.3. Сортировка пузырьком
- •3. Определение четности чисел
- •3.1. Определение чисел кратных двум
- •3.2. Определение числа единиц в числе
- •4. Определение кратности любому числу
- •5. Определение модуля числа
- •6. Многословное умножение
- •Заключение
- •Приложения Приложение 1. Оформление отчета по курсовой работе
- •Результаты работы программы
- •Приложение 2. Список команд
- •Приложение 3. Эмулятор Ersatz-11
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 – счетчик единичных битов.