Найти ошибку в программе (поиск минимального элемента) - Assembler

Узнай цену своей работы

Формулировка задачи:

Ребят, долго не могу найти ошибку в коде. Уверен, что нужно исправить 1-2 символа и программа будет работать.

Задача такая: Найти минимальный элемент из массива

. Сейчас программа выводит "0", а должна "4". Мой код:
data segment
a db 9,8,7,6,5,4
b db 1 dup(?)
data ends
code segment
assume ds:data,cs:code
begin: mov ax,data
mov ds,ax
mov si,0
mov cx,6
mov ah,0
m1:mov al,a[si]
cmp al,ah
ja m2
mov ah,al
m2: inc si
loop m1
mov al,ah
mov ah,2h
mov dl,al
add dl,30h
int 21h
mov ah,4ch
int 21h
code ends
end begin

Решение задачи: «Найти ошибку в программе (поиск минимального элемента)»

textual
Листинг программы
data segment
a db 9,8,7,6,5,4
b db 1 dup(?)
data ends
code segment
assume ds:data,cs:code
begin:
    mov ax,data
    mov ds,ax
 
    mov si,0
    mov cx,6
 
    mov dl,a
m1: cmp a[si],dl
    ja  m2
    mov dl,a[si]
m2: inc si
    loop m1
 
    mov ah,2h
    add dl,30h
    int 21h
 
    mov ah,0
    int 16h
 
    mov ah,4ch
    int 21h

Объяснение кода листинга программы

Список с пояснениями:

  1. Переменная a содержит список чисел на языке ассемблера.
  2. Переменная b используется для хранения результата.
  3. Цикл m1 проходит по всем элементам списка a.
  4. Цикл m2 запускается, если текущий элемент списка a больше dl (переменная, которая ищет минимальное значение).
  5. Если m2 завершился, значит, мы нашли минимальное значение и сохраняем его в dl.
  6. Увеличиваем счётчик si на единицу, чтобы перейти к следующему элементу списка.
  7. Цикл m1 продолжается, пока не будет пройден весь список.
  8. Выводим результат на экран с помощью функции int 21h.
  9. Завершаем работу программы.

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

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