В массиве определить количество различных чисел - 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

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


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

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

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