Машинные языки программирования
3

Анализ поставленной задачи

 

Искомое задание сформулировано следующим образом:

Найти максимальное число из массива произвольной длины и подсчитать количество «0» в этом числе. Начальный и конечный адреса массива расположить в ячейках памяти. Формат чисел следующий:

7

6

5

4

3

2

1

0

З

Модуль числа

 

где: З – знак числа.

 

Задача логичным образом делится на две:

1)      Определить максимум массива

2)      Посчитать число нолей в найденном максимуме

  1.    Первая часть задачи в общем виде выглядит так:

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

- текущий максимум отрицательный, текущий элемент положительный (в данном случае элемент максимум становится текущим максимумом);

- текущий максимум положительный, текущий элемент отрицательный (в данном случае текущий максимум остается без изменений и осуществляется переход к следующему элементу);

- текущий элемент и текущий максимум одного знака (в данном случае производится неразрушающее вычитание).

Данный цикл будет повторяться до тех пор, пока адрес текущего максимума не совпадет с адресом текущего элемента. И после этого текущий максимум будет абсолютным  максимумом масс