Из массива Х размером nx, сформировать массив Y размером ny, что бы элементы из массива X не повторялись в Y - Assembler

Узнай цену своей работы

Формулировка задачи:

Вот что получилось, но почему-то не удаляет повторяющиеся элементы
        mov esi,0
        mov ecx,nx
        mov ebx,0
C1:
       push ecx
       mov  ecx,nx
       mov  edi,0
       mov  col,0
       mov  eax,x[esi*4]
C2:
       cmp  eax,x[edi*4]
       je   m2
       inc  col
       inc  edi
       loop C2
       cmp  col,1
       jne  m2
       mov  y[ebx*4],eax
       inc  ebx
 
m2:     
        pop ecx
        inc esi
        loop C1
        mov ny,ebx

Решение задачи: «Из массива Х размером nx, сформировать массив Y размером ny, что бы элементы из массива X не повторялись в Y»

textual
Листинг программы
x    dd  1, 2, 3, 1, 5, 3     
nx   =   ($ - x) / 4         
y    dd  nx dup (-1)                  
 
start: 
 
    xor ebx, ebx
    mov esi, x
    @@:
        cmp esi, y
        je @exit
        lodsd
        mov ecx, ebx
        mov edi, y
        repne scasd
    jz  @b
        mov [y + ebx*4], eax
        inc ebx
    jmp @b
 
@exit:

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

  1. Задается размер массива X - nx, который равен разнице между последним элементом массива X и адресом X в памяти, деленной на 4.
  2. Инициализируется массив Y размером ny, равным nx, но с заполнителем (-1).
  3. В цикле сравниваются элементы массива X с элементами массива Y. Если элемент X встречается в массиве Y, то он пропускается.
  4. Если элемент X не встречается в массиве Y, то он копируется в массив Y.
  5. После обработки всех элементов массива X, в массиве Y остается только уникальные элементы.

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


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

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

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