Поиск максимального значения в массиве - Assembler
Формулировка задачи:
Вечер добрый, господа! Задача: поиск максимального элемента в массиве и вывод его. Знаю, что тема уже заезженная и много тем о ней, но код не работает) Я тут пробовал написать, но чет не очень у меня не шибко работает) Может кто поможет новичку исправить код? Использую FASM.
Листинг программы
- org 100H
- mov si, -1
- mov bl, 0 ; хранится значение max
- start:
- inc si
- cmp si, 9
- je exit
- cmp [mas + si], bl
- jg zamena ; если эл. массива больше регистра bl (max), то вызываем замену
- jmp start
- exit:
- mov ah, 02h
- mov dl, bl ; выводим наш максимальный эл
- int 21h
- mov ah, 0
- int 16h
- mov ax, 4C00h
- int 21h
- ret
- zamena:
- mov bl, [mas + si] ; заменяем bl(max) на эл. массива
- loop start
- mas db 1,2,3,4,5,6,7,8,9,5
Решение задачи: «Поиск максимального значения в массиве»
textual
Листинг программы
- org 100H
- start:
- mov cx,10
- mov si,mas
- sub si,1
- cicl:
- inc si
- mov al,byte [si]
- cmp al,ah
- ja cicl1
- jmp cicl2
- cicl1:
- mov ah,al
- cicl2:
- loop cicl
- exit:
- ;max simvol of massive ah
- mov dl,ah
- add dl,30h
- mov ah, 02h
- int 21h
- mov ah, 0
- int 16h
- mov ax,4C00h
- int 21h
- mas db 1,2,3,4,5,6,7,8,9,5
Объяснение кода листинга программы
- org 100H — здесь задаётся базовый адрес для сегмента (100H), в данном случае — для сегмента данных.
- start: — здесь начинается выполнение программы.
- mov cx,10 — данная команда задаёт значение счётчика (cx), которое будет использоваться в цикле.
- mov si,mas — здесь в качестве регистра-индекса (si) используется значение начала массива (mas).
- sub si,1 — здесь уменьшается значение регистра-индекса (si) на единицу, так как счёт начинается с нуля.
- cicl: — здесь начинается цикл.
- inc si — увеличивается значение регистра-индекса (si) на единицу.
- mov al,byte [si] — в регистр (al) записывается значение байта, который находится по индексу (si) в массиве.
- cmp al,ah — сравниваются значения регистра (al) и аккумулятора (ah).
- ja cicl1 — если значение регистра (al) больше значения аккумулятора (ah), то происходит переход на метку cicl1.
- jmp cicl2 — в противном случае происходит переход на метку cicl2.
- cicl1: — здесь выполняются действия, которые будут выполняться при каждом превышении значения регистра (al) значения аккумулятора (ah).
- mov ah,al — значение регистра (al) копируется в аккумулятор (ah).
- cicl2: — здесь выполняются действия, которые будут выполняться после каждой итерации цикла.
- loop cicl — здесь происходит проверка условия цикла (cicl), и если оно истинно, то происходит переход на начало цикла (cicl).
- mov dl,ah — в регистр (dl) записывается значение аккумулятора (ah), которое содержит максимальное значение.
- add dl,30h — к значению регистра (dl) добавляется значение 30h, чтобы получить ASCII-код символа для максимального значения.
- mov ah, 02h — в регистр (ah) записывается значение 02h, которое используется для вывода ASCII-кода.
- int 21h — происходит ввод/вывод команды, которая выводит ASCII-код на экран.
- mov ah, 0 — в регистр (ah) записывается значение 0, которое используется для вывода символа новой строки.
- int 16h — происходит ввод/вывод команды, которая выводит символ новой строки на экран.
- mov ax,4C00h — в регистры (ax) записывается значение 4C00h, которое является кодом завершения работы программы.
- int 21h — происходит ввод/вывод команды, которая завершает работу программы. Таким образом, в данном коде выполняется поиск максимального значения в массиве, и выводится ASCII-код символа и само значение на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д