Пример 3.1. Число хранится в ОЗУ по адресу 0900Н. Определить число единиц в младшем полубайте этого числа. Результат поместить в ОЗУ по адресу 0901Н.
На рис. 3.1 приведена блок-схема алгоритма решения данной задачи. Рассмотрим операции, выполняемые в каждом из блоков.
Блок 1 обнуляет регистр В (для счета количества единиц будем использовать регистр В); эта операция выполняется командой загрузки MVI B, 00Н.
Блок 2 производит запись в регистровую пару HL адреса (0900Н) числа, хранящегося в ОЗУ; выполняющая эту операцию команда имеет мнемонику LXI H, 0900Н.
Блок 3 производит прием в аккумулятор содержимого ячейки ОЗУ (М), адресом, которой служит содержимое пары регистров HL; выполняющая эту операцию команда имеет мнемонику МОV А, М.
0 ® B
0900H ® HL
(B) +1 ® B
(M) ® A
ЦСП(A) ® A
(B) +1 ® B
(TC)
ЦСП(A) ® A
(B) +1 ® B
(TC)
ЦСП(A) ® A
ЦСП(A) ® A
(TC)
(TC)
(HL) +1 ® HL
(B) ® M
Рис. 3.1. Блок-схема алгоритма нахождения количества единиц в младшем полубайте числа
Блок 4 осуществляет циклический сдвиг вправо содержимого аккумулятора. При этом младший разряд D0 числа записывается в триггер переноса Тс, а на его место сдвигается разряд D1; мнемоника команды RRC.
Блок 5 реализует разветвление по содержимому триггера Тс: в зависимости от значения содержимого этого триггера выполняется либо блок 6, либо блок 7; мнемоника команды JNC MET1.
Блок 6 осуществляет увеличение содержимого регистра В, в котором подсчитывается количество единиц младшего полубайта числа; мнемоника команды INR B.
Блок 7 идентичен блоку 4. Теперь в триггер переноса Тс запишется разряд D1, а на его место в аккумуляторе сдвигается разряд D2; мнемоника команды RRC.
Блок 8 реализует разветвление по содержимому триггера Тс: в зависимости от значения содержимого этого триггера выполняется либо блок 9, либо блок 10; мнемоника команды JNC МЕТ2.
Далее блоки с 9 по 15 выполняют те же самые операции, что и предыдущие, только анализируются соответственно разряды D2 и D3 заданного числа.
Блок 16 формирует в паре регистров HL адрес ОЗУ (0901Н), куда необходимо переслать результат; мнемоника команды INX H.
Блок 17 пересылает в память (по адресу 0901Н) полученный результат в регистре В, соответствующий количеству единиц в младшем полубайте заданного числа; мнемоника команды MOV M, В.
В табл. 3.1 приведена программа рассматриваемой задачи на языке Ассемблер и в машинных кодах. Размещение команд производилось с ячейки ОЗУ, имеющей адрес 0800Н.
Таблица 3.1
Программа нахождения количества единиц в младшем полубайте числа