Найти количество различных элементов в данном массиве и вывести их на экран - Assembler
Формулировка задачи:
Всем Доброго времени суток. Есть задача: Дан целочисленный массив. Найти количество различных элементов в данном массиве и вывести их на экран. Не знаю даже с чего начать. Как задать массив? просто db 1,2,2,2,2.. типо того? есть для примера код. Делающий следующее: Посчитать кол-во одинаковых цифр в массиве. Массив из однозначных чисел повторяется только одна цифра. Я совсем не могу разобраться и понять, что нужно поменять
Вопрос снят.
Решение задачи: «Найти количество различных элементов в данном массиве и вывести их на экран»
textual
Листинг программы
org 100h Start: mov cl, 0 mov ch, 0 mov bh, 0 mov bx, Array mov si, 0 mov dl, 0 mov di, 0 GetSize: mov ax, [bx] cmp al, $21 je aa inc cl inc bx jmp GetSize aa: mov bx, cx kk: mov si, bx sub si, cx mov dl, [Array + si] add dl, '0' mov ah, 02h int 21h mov dl, ' ' int 21h loop kk mov dx, NewLine mov ah, 09h int 21h mov cx, bx Go: dec cx EnterNamber: mov ah, $01 int 21h mov ah, $01 int 21h Find: mov di, currString mov dx, 0 FindNumber: mov al, bl scasb jz IncCount dec di mov al, bh scasb jz IncCount ContinueFind: loop FindNumber Next: mov dl, [Array] mov [NewArray+di], dl inc di mov [NewArray+di], $21 mov bx, NewArray Go1: mov bx, cx Print: mov si, cx mov dl, [NewArray + si-1] add dl, '0' mov ah, 02h int 21h mov dl, ' ' int 21h loop Print mov dx, NewLine mov ah, 09h int 21h mov ah, 08h int 21h ret NewArray db 10 dup (0) NewLine db 13,10,'$' Array db 1,2,3,3,0,1,7,1,2,$21
Объяснение кода листинга программы
Код выполняет следующие действия:
- Инициализирует регистры и счётчики.
- Переменная
Arrayсодержит список элементов для подсчёта (1,2,3,3,0,1,7,1,2,$21). - Переменная
NewArrayбудет использоваться для хранения уникальных значений (изначально заполняется нулями). - Переменная
NewLineсодержит символ конца строки (13,10,'$'). - Переменная
cxиспользуется в качестве счётчика количества элементов в списке. - Ввод имени файла с помощью функции
int 21h(ввод с клавиатуры). - Поиск уникальных значений в списке
Arrayи подсчёт их количества. - Вывод уникальных значений на экран.
- Завершение работы программы (вывод строки
Press any key...). Список действий: - Инициализация счётчиков
clиcx(количество уникальных значений и общее количество элементов в списке соответственно). - Перебор элементов списка, начиная с первого.
- Если текущий элемент равен последнему (значение $21), то счётчик
cxуменьшается и выполняется переход к началу цикла. - Если текущий элемент меньше или равен предыдущему, то выполняется переход к следующей итерации цикла.
- Если текущий элемент больше предыдущего, то значение счётчика
diуменьшается и выполняется переход к следующей итерации цикла. - Если текущее значение в списке уникально (не равно предыдущему), то оно записывается в
NewArrayи увеличивается счётчикdi. - Если текущее значение в списке равно предыдущему, то выполняется переход к следующей итерации цикла.
- После завершения цикла выполняется вывод уникальных значений на экран.
- Завершение работы программы.