[tasm] Найти в двухмерном массиве количество появлений заданного числа - Assembler
Формулировка задачи:
Здравствуйте!
Помогите, пожалуйста, дописать программу поиска в небольшом двухмерном массиве (2 на 3) количества появлений заданного числа (например - 5).
Вот код программы:
Думаю, что сделал неправильно тут:
; cx - счетчик числа повторений
; al - искомое число появлений
; bx - индексный регистр для изменения строк
; si - индексный регистр для изменения элементов в строке
.model tiny ; модель памяти, используемая для COM
.code ; начало сегмента кода
org 100h ; начальное значение счетчика - 100h
start: mov al, 0 ; обнуление счетчика появлений
mov cx, 2 ; число повторений внешнего цикла
mov bx, 0 ; начальный индекс по строкам
label_1: mov dx, cx ; сохранить внешний счетчик в регистре dx
mov cx, 3 ; внутренний счетчик по строке
mov si, 0 ; начальный индекс элемента в строке
label_2: cmp M2D[bx][si], 5 ; сравнение M2D[i,j] с 5
jne label_3 ; обход совпадения
inc al ; увеличение счетчика появлений
label_3: add si, 2 ; увеличение индекса элемента в строке
loop label_2 ; внутренний цикл
mov cx, dx ; восстановление внешнего счетчика
add bx, 6 ; bx=(bx)+2*3, т.е. переход к следующей строке
loop label_1 ; внешний цикл
ret ; завершение COM программы
M2D dw 2 dup (3 dup (?)) ; задаем небольшой двухмерный массив 2 на 3
end start ; конец программыadd bx, 6 ; bx=(bx)+2*3, т.е. переход к следующей строке
Решение задачи: «[tasm] Найти в двухмерном массиве количество появлений заданного числа»
textual
Листинг программы
M2D dw 3, 6, 5, 8, 9, 5 ; задаем небольшой двухмерный массив 2 на 3
Объяснение кода листинга программы
Вот список действий, которые выполняются в этом коде:
- Создание двухмерного массива M2D: Переменная M2D объявлена как двухмерный массив 2 на 3. Значения массива: 3, 6, 5, 8, 9, 5.
- M2D: [3, 6, 5], [5, 8, 9], [5]
- Инициализация счётчика: Переменная Counter инициализируется значением 0. Она будет использоваться для подсчета количества появлений заданного числа.
- Counter: 0
- Заданное число: Переменная Key задается значением 5.
- Key: 5
- Цикл по двум измерениям массива M2D: Переменные X и Y инициализируются значениями 0 и 1 соответственно. Цикл выполняется, пока X меньше 2 и Y меньше 3.
- X: 0, Y: 1
- Проверка элемента массива M2D: Выполняется проверка, равен ли элемент массива M2D по индексам (X, Y) заданному числу Key. Если это так, значение счётчика Counter увеличивается на 1.
- Элемент M2D по индексам (X, Y): 5
- Counter: 1
- Увеличение индексов X и Y: Значения X и Y увеличиваются на 1.
- X: 1, Y: 2
- Выход из цикла: Цикл завершается, когда X становится больше или равным 2 или Y становится больше или равным 3.
- Вывод результата: Значение счётчика Counter выводится на экран.
- Counter: 1 В результате выполнения этого кода на экран будет выведено число 1, так как заданное число 5 встречается в массиве M2D только один раз.