Найти максимальный элемент в массиве и количество таких элементов - Assembler
Формулировка задачи:
Здравствуйте, первую часть задания сделал, но вот с второй не получается разобраться. Прошу помочь. На этом форуме уже находил похожее, но не смог понять. Хотелось бы увидеть на моем примере.
Вот код для поиска максимального элемента:
Листинг программы
- cseg segment 'code'
- assume cs:cseg, ds:dseg
- org 100h
- main proc
- mov ax, dseg ; указывает на регистр данных
- mov ds, ax ; указывает на регистр данных
- Xor si, si; инициализация счетчика
- mov cx, len_mas
- M1:
- mov bl, mas[si]; помещаем массив в bl
- cmp bl, max; сравниваем с 0 на 1 итерации
- JG I
- jmp kon
- I: mov max, bl
- kon: inc si
- loop M1
- mov al, max
- Call Write
- Exit:
- mov ah, 04ch; выход из программы (функция DOS)
- mov al, 0h; код возврата
- int 21h;
- ret; возвращаем управление отладчику
- Write proc
- aam
- add ax, 3030h
- mov bx, ax
- mov ah, 02h
- mov dl, bh
- int 21h
- mov dl, bl
- int 21h
- ret
- Write ENDP
- main endp
- dseg segment
- mas db 10,98,99,20,21
- len_mas = $-mas
- otr db 0
- max db 0
- incmax db 0
- dseg ends
- cseg ends
- stk segment stack
- dw 256 dup (0)
- stk ends
- end main
Решение задачи: «Найти максимальный элемент в массиве и количество таких элементов»
textual
Листинг программы
- .model small
- .stack 100h
- .data
- Mas db 8,9,3,1,10,5,10
- len_mas = $-Mas
- max db 0
- IncMax db 0
- CRLf db 13, 10, '$'
- .code
- main proc
- mov ax, @data
- mov ds, ax
- cld
- lea si, Mas
- lodsb
- mov Max, al
- mov IncMax, 1
- mov cx, len_mas
- dec cx
- @@ForI:
- lodsb
- cmp al, Max
- jng @@TestEqu
- mov Max, al
- mov IncMax, 0
- @@TestEqu:
- cmp al, Max
- jne @@Continue
- inc IncMax
- @@Continue:
- loop @@ForI
- mov ah, 0
- mov al, Max
- call Show_AX
- lea dx, CrLf
- mov ah, 9
- int 21h
- mov ah, 0
- mov al, IncMax
- call Show_AX
- mov ax, 4C00h
- int 21h
- main endp
- ; выводит число из регистра AX на экран
- ; входные данные:
- ; ax - число для отображения
- Show_AX proc
- push ax
- push bx
- push cx
- push dx
- push di
- mov cx, 10
- xor di, di ; di - кол. цифр в числе
- ; если число в ax отрицательное, то
- ;1) напечатать '-'
- ;2) сделать ax положительным
- or ax, ax
- jns @@Conv
- push ax
- mov dx, '-'
- mov ah, 2 ; ah - функция вывода символа на экран
- int 21h
- pop ax
- neg ax
- @@Conv:
- xor dx, dx
- div cx ; dl = num mod 10
- add dl, '0' ; перевод в символьный формат
- inc di
- push dx ; складываем в стэк
- or ax, ax
- jnz @@Conv
- ; выводим из стэка на экран
- @@Show:
- pop dx ; dl = очередной символ
- mov ah, 2 ; ah - функция вывода символа на экран
- int 21h
- dec di ; повторяем пока di<>0
- jnz @@Show
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- Show_AX endp
- end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д