Обнулить элементы массива имеющие одинаковые значения - 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

Объяснение кода листинга программы

В данном коде выполняется обнуление элементов массива, которые имеют одинаковые значения.

  1. Переменная array содержит в себе массив, который необходимо обработать.
  2. Переменная size содержит в себе размер массива.
  3. Переменная i используется в качестве счётчика для перебора элементов массива.
  4. Переменная j используется в качестве счётчика для проверки наличия одинаковых значений в массиве.
  5. Переменная k используется в качестве счётчика для перебора элементов массива с целью обнуления.
  6. Условие if проверяет, являются ли текущий и предыдущий элементы массива равными. Если это так, то выполняется блок кода, который обнуляет текущий элемент массива.
  7. Условие else используется для выхода из цикла, когда текущий элемент массива не равен предыдущему.
  8. Цикл for используется для перебора элементов массива с целью обнуления.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы