Обнулить элементы массива имеющие одинаковые значения - Assembler
Формулировка задачи:
Прошу помощи по задачке на ассемблере.
Задача звучит так. Обнулить элементы массива А(I) имеющие одинаковые значения. I=1,2,..,10, Определить количество оставшихся элементов.
Сам хотел реализовать так: Каждый элемент сравнивается со всеми остальными, и если он равен какому-то элементу в этом массиве(кроме себя), то из счетчика вычитается единица, а дубликат заменяется на ноль. Но вот что-то как-то не получается, ошибки в 20, 23,24 строках. Не могу понять что сделано не так.
model small ;Модель памяти .stack 100h ;Сегмент стека .data ;Сегмент данных len equ 10 ;Колличство элементов в mas k equ 10 ;Счетчик оставшихся элементов k=10 mas db 1,2,1,3,3,4,5,0,7,6 ;элементы массива res db 10 dup(?) .code ;Сегмент кода start: mov ax,@data ;Физическйий адрес сегмента данных в регистре ax mov ds,ax mov cx,len ;Длину поля mas в cx mov ch,len ;дублированный массив xor ch,ch ;Обнуление индекса дублированного массива xor si,si ;Обнуление индекса массива jcxz exit ;Проверка cx на 0, если 0, то выход m1: cmp ch,10 ;Если ch=10 je m3 ;То переход на m3 cmp mas[si],mas[ch+1] ;Сравнение элемента массива с др. эл. je m2 ;Если равны, то на m2 m2: mov res[ch+1],0 ;Зануление дубликата dec k ;k=k-1 оставшиеся элементы inc ch ;Переход к следующему элементу loop m1 m3: inc si ;Переход на следующий элемент loop m1 ;Возврат к метке m1 exit: mov ax,4c00h int 21h ;Возврат упарвления операционной системе end start
Решение задачи: «Обнулить элементы массива имеющие одинаковые значения»
textual
Листинг программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
Объяснение кода листинга программы
В данном коде выполняется обнуление элементов массива, которые имеют одинаковые значения.
- Переменная
array
содержит в себе массив, который необходимо обработать. - Переменная
size
содержит в себе размер массива. - Переменная
i
используется в качестве счётчика для перебора элементов массива. - Переменная
j
используется в качестве счётчика для проверки наличия одинаковых значений в массиве. - Переменная
k
используется в качестве счётчика для перебора элементов массива с целью обнуления. - Условие
if
проверяет, являются ли текущий и предыдущий элементы массива равными. Если это так, то выполняется блок кода, который обнуляет текущий элемент массива. - Условие
else
используется для выхода из цикла, когда текущий элемент массива не равен предыдущему. - Цикл
for
используется для перебора элементов массива с целью обнуления.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д