Постановка задачи Задача состоит из нескольких частей. Рассмотрим их последовательно. Сначала в цикле происходит загрузка данных в массив. По условию задачи элементы массива — слова. Однако, из-за сложностей с io.asm и невозможностью корректно выводить числа больше 99, в программе используется массив не из слов, а из байт, но в два раза больше (слово — два байта). Поэтому, когда вводится очередной элемент массива, то он попадает в массив в два этапа — по одному байту заносится в ячейку в массива. Таким образом в массиве каждый элемент занимает по две ячейки размером в байт, так что фактичеки условие задания выполнено. После инициализации массива в цикле осуществляется его вывод. Поскольку элементы массива байты, а выводить надо слова, то в регистр ах загружается каждый элемент массива побайтно — сначала в регистр ah, потом в al, а потом вызывается функция io.asm для вывода числа на экран. После каждого вывода элемента на экран выводится табуляция 21м прерыванием. Кроме того в цикле проверяется вторым счетчиком достижение конца строки (4 элемента), если конец строки достигнут, то выводится на экран перевод на следующую строку, а счетчик обнуляется. Далее идет поиск количества столбцов с неубывающей последовательностью чисел. Для этого используется цикл в 4 итерации (по количеству столбцов). В каждой итерации высчитывается индекс первого элемента столбца (умножением счетчика на 2, т.к. в каждой ячейке массива по два байта), а далее последовательно сравниваются первый элемент со вторым, второй с третьим. Если выполняется условие, что каждый следующий элемент не меньше предыдущего, то счетчик таких столбцов увеличивается на 1, а в переменную заносится индекс текущего столбца, элементы которого сравниваются (это потребуется далее при подсчете суммы элементов столбца). Если условие не выполняется, то происходит просто переход на следующую интерацию. Для индексирования между элементами столбца используется регистр di, к которому просто прибавляетя 8 (т.к. в строке 4 элемента по 2 байта). Когда подсчет столбцов завершен, то переменная, где хранится счетчик, сравнивается с 0. Если счетчик равен 0, то выводится сообщение об отсутствии таких столбцов, иначе счетчик сравнивается с 1. Если столбец такой один, то выводится соответствующее сообщение, далее расчитывается сумма элементов столбца (аналогичная индексация с периодом в 8). Если счетчик не равен 1 (и автоматически не равен 0), значит таких столбцов несколько, об этом выводится сообщение, а также выводится количество этих столбцов (из переменной kol) . Далее подсчитывается сумма элементов столбца аналогично работе при kol=1. После этого программа ожидает нажатия клавиши и выходит. |