В массиве определить количество различных чисел - Assembler
Формулировка задачи:
Здравствуйте много. Помогите мне решить задачу.
Вот условие:
В массиве целых знаковых чисел (минимум 25 элементов) определить количество различных чисел.
Решение задачи: «В массиве определить количество различных чисел»
textual
Листинг программы
.model small ; для маленких DOS-программ .data ; тут я объявляю переменные (сегмент DATA) mas db -1,3,3,4,50 ; объявление массива, типа db (байт), 5 элементов num db 00005h ; объявление числа элементов массива .stack 256h ; стек .code ; а здесь мы будем писАть алгоритм ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; lbubblesortb proc ; объявление процедуры ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; xor cx, cx ;чистим регистр cx j2: mov cl, num ; заносим num в cl dec cl ; отнимаем 1 из cl c0: mov bx, cx ; заносим cx в bx mov al, mas[bx] ; заносим mas[bx] (текущий элемент массива) в al cmp al, mas[bx-1] ; сравниваем текущий элемент массива с предыдущим jg j1 ; если al (а значит mas[bx]) больше, то перехидим на метку j1 loop c0 ; если нет то: if(cx>0) (cx=cx-1, goto c0); jmp j0 ; заканчиваем алгоритм ; Метка j1 меняет текущий и предыдущий элемент мессива j1: mov ah, mas[bx-1]; mov mas[bx], ah mov mas[bx-01h], al jmp j2 jmp c0 j0: ret lbubblesortb endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Main PROC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; main proc mov ax, @data mov ds, ax mov ah, 09h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; следующие 11 строк - вывод массива xor cx, cx xor bx, bx mov cl, 5 mov bx, 0 c1: mov ah, 02h mov dl, mas[bx] add dl, 030h int 21h inc bx loop c1 call lbubblesortb ; вызов процедуры ; следующие 11 строк - вывод отсортированного массива xor cx, cx xor bx, bx mov cl, 5 mov bx, 0 c2: mov ah, 02h mov dl, mas[bx] add dl, 030h int 21h inc bx loop c2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ax, 04C00h ; конец программы int 21h main endp end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д