Поиск и вывод минимального элемента массива - Assembler

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

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

Собственно программа готова, но выводит ошибки. Ругается на len. Прошу помочь исправить программу. Заранее спасибо!
.386
.model  flat,stdcall
option  casemap:none
include d:\masm32\include\kernel32.inc
include d:\masm32\include\msvcrt.inc
include d:\masm32\macros\macros.asm
 
includelib d:\masm32\lib\msvcrt.lib
includelib d:\masm32\lib\kernel32.lib
 
.data 
array db 15,-100,50,0
len equ $ - array
min db ?
imin dw ?
tpt db      'Result Min = al',0
 
.stack 100h 
.code 
 
start: 
    mov ax,@data 
    mov ds,ax 
    mov cx,len 
    dec cx 
    xor di,di           ; указатель на 1-й элемент, принятый за начальный минимум 
    mov si,1            ; указатель на 2 элемент (его индекс 1) 
cycle: 
    mov al,array[si] 
    cmp al,array[di] 
    jge next 
    mov di,si 
next: 
    inc si 
    loop cycle 
    mov imin,di         ; запись индекса минимального элемента 
    mov al,array[di] 
    mov min,al          ; запись значения минимального элемента 
;   ...
    mov ah,4ch 
    int 21h 
    invoke  crt_printf, ADDR tpt, min
        invoke  ExitProcess, 0
    
    end start

Решение задачи: «Поиск и вывод минимального элемента массива»

textual
Листинг программы
.386
.model  flat,stdcall
option  casemap:none
include d:\masm32\include\kernel32.inc
include d:\masm32\include\msvcrt.inc
include d:\masm32\macros\macros.asm
 
includelib d:\masm32\lib\msvcrt.lib
includelib d:\masm32\lib\kernel32.lib
 
.data 
array db 15,-100,50,0
len equ $ - array
min dd ?
imin dd ?
tpt db      'Result Min = al',0
 
 
.code 
 
start: 
    mov cx,len 
    dec cx 
    xor di,di           ; указатель на 1-й элемент, принятый за начальный минимум 
    mov si,1            ; указатель на 2 элемент (его индекс 1) 
cycle: 
    mov al,array[si] 
    cmp al,array[di] 
    jge next 
    mov di,si 
next: 
    inc si 
    loop cycle 
    mov imin,di         ; запись индекса минимального элемента 
    mov al,array[di] 
    mov min,al          ; запись значения минимального элемента 
;   ...
 
 
    invoke  crt_printf, ADDR tpt, min
        invoke  ExitProcess, 0
    
    end start

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

В этом коде выполняется следующая последовательность действий:

  1. Задаётся длина массива (в единицах типа double) и сохраняется в переменной len.
  2. Задаются начальные значения для двух указателей: di — на элемент с предполагаемым минимальным значением, si — на следующий элемент.
  3. В цикле сравниваются текущие значения di и si. Если si содержит меньшее значение, то значения d и s меняются местами.
  4. Если элемент с индексом di больше или равен элементу с индексом si, то цикл продолжается.
  5. Когда цикл закончится, в переменной imin будет содержаться индекс минимального элемента, а в переменной min — его значение.
  6. Выводится сообщение, содержащее минимум.
  7. В конце работы программы вызывается функция ExitProcess, предназначенная для корректного завершения работы приложения.

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

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