Из массива Х размером 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:
Объяснение кода листинга программы
- Задается размер массива X - nx, который равен разнице между последним элементом массива X и адресом X в памяти, деленной на 4.
- Инициализируется массив Y размером ny, равным nx, но с заполнителем (-1).
- В цикле сравниваются элементы массива X с элементами массива Y. Если элемент X встречается в массиве Y, то он пропускается.
- Если элемент X не встречается в массиве Y, то он копируется в массив Y.
- После обработки всех элементов массива X, в массиве Y остается только уникальные элементы.