Номер максимального элемента массива - Assembler
Формулировка задачи:
Имеется код, который ищет и выводит на экран максимальный элемент массиваА как вывести его номер?
.data mas db 52, 22, 70, 38, 29, 90, 21, 40, 50, 60 len dw $-mas .code start: assume cs:code, ds: data mov ax, data mov ds, ax lea bx, mas ;берём в bx адрес первого элемента mov cx, len ;счетчик цикла mov ah, 0 mov al, [bx] Next: cmp al, [bx] ; сравниваем макс. число с очередным элементом массива jg Max ;Al>[BX] mov al, [bx] Max: inc bx ;переходим к следующему элементу loop Next ;вывод(начало) ;ДАННЫЕ В al хранятся aam add ax, 3030h mov bx, ax mov ah, 02 mov dl, bh int 21h mov dl, bl int 21h mov ax, 4c00h int 21h ;вывод(конец) code ends end start
Ассемблер - EMU8086
Решение задачи: «Номер максимального элемента массива»
textual
Листинг программы
.model small .data mas db 52, 22, 70, 38, 29, 90, 21, 40, 50, 60 len dw $-mas indexMax db ? strMax DB 13,10,"Max value: ","$" strMaxIndex DB 13,10,"Index of Max value: ","$" .code start: assume cs:@code, ds:@data mov ax, @data mov ds, ax lea bx, mas ;берём в bx адрес первого элемента mov cx, len ;счетчик цикла mov ah, 1 mov al, [bx] mov indexMax, ah Next: cmp al, [bx] ; сравниваем макс. число с очередным элементом массива jg Max ;Al>[BX] mov al, [bx] mov indexMax, ah Max: inc bx ;переходим к следующему элементу inc ah loop Next ;вывод(начало) push ax ; Ввод множимого lea dx,strMax ; в DX - адрес строки mov ah,9 int 21h ; вывод строки pop ax ;ДАННЫЕ В al хранятся aam add ax, 3030h mov bx, ax mov ah, 02 mov dl, bh int 21h mov dl, bl int 21h ; Ввод множимого lea dx,strMaxIndex ; в DX - адрес строки mov ah,9 int 21h ; вывод строки mov al, indexMax ;теперь номер максимального в al aam add ax, 3030h mov bx, ax mov ah, 02 mov dl, bh int 21h mov dl, bl int 21h mov ax, 4c00h int 21h ;вывод(конец) end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д