Найти номер максимального числа - Assembler

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

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

Максимальное число находит, заношу в регистр BX, а номер пишет 5, хотя должен быть 7 , так как макс число 15 в массиве, в чем ошибка?, Потом нужно номер и максимально число перемножить и поместить в регистр BX
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size 
; in the 8086 model properties to 0x10000
;====================================================================
    
    CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA
 
START:
mov cx,0
mov AX,DATA 
mov DS,AX
lea SI,X
mov dl,0
mov bl,[si]
 
h:
inc cx
cmp bl,[si+2]
jg Max
mov bl,[si+2]
mov indexMax,dl
mov dl,indexMax
Max:
add si,2
inc dl
cmp cx,len
jne h 
ENDLESS:
    JMP ENDLESS
CODE    ENDS
DATA SEGMENT PUBLIC PARA 'DATA'
X DW 5,6,7,2,3,4,15,1,2,8
indexMax DB ?
len=$-X
DATA ENDS
        END START

Решение задачи: «Найти номер максимального числа»

textual
Листинг программы
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:   Ср апр 19 2017
; Processor: 8086
; Compiler:  MASM32
;
; Before starting simulation set Internal Memory Size
; in the 8086 model properties to 0x10000
;====================================================================
 
    CODE    SEGMENT PUBLIC 'CODE'
        ASSUME CS:CODE,DS:DATA
 
START:
        mov AX,DATA
        mov DS,AX
 
        lea     si,     X
        push    si
        mov     ax,     LenX
        push    ax
        call    MaxIndx
        mov     IndxMaxX,       al
 
        lea     si,     Y
        push    si
        mov     ax,     LenY
        push    ax
        call    MaxIndx
        mov     IndxMaxY,       al
 
        lea     si,     Z
        push    si
        mov     ax,     LenZ
        push    ax
        call    MaxIndx
        mov     IndxMaxZ,       al
 
ENDLESS:
        JMP     ENDLESS
 
MaxIndx proc    Len:word, Array:word
        push    bp
        mov     bp,     sp
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        mov     cx,     Len
        mov     si,     Array
        mov     bx,     [si]    ;bx - максимальный элемент
        mov     ax,     0       ;индекс максимального элемента
        mov     dl,     0       ;индекс текущего элемента
        dec     cx              ;рассматривать будем со 2-го элемента
        add     si,     2
        inc     dl
h:
        cmp     bx,     [si]
        jge     Max
        mov     bx,     [si]
        mov     al,     dl
Max:
        add     si,     2
        inc     dl
        loop    h
 
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     bp
        ret     4
MaxIndx endp
 
CODE    ENDS
 
DATA SEGMENT PUBLIC PARA 'DATA'
X               DW      2,6,2,7,9,8,7,1,2,9
LenX            equ     ($-X)/2
IndxMaxX        db      ?
Y               dw      9,4,5,6,2,1,5,7,2,0
LenY            equ     ($-Y)/2
IndxMaxY        db      ?
Z               dw      3,2,5,6,2,1,5,7,2,0
LenZ            equ     ($-Z)/2
IndxMaxZ        db      ?
DATA ENDS
 
STACKSEG SEGMENT PARA STACK 'STACK'
        db 100h dup(?)
STACKSEG ENDS
        END START

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

  1. Старт программы.
  2. Помещаем адрес X в si (source index).
  3. Сохраняем si на стеке.
  4. Помещаем длину X в ax.
  5. Сохраняем ax на стеке.
  6. Вызываем процедуру MaxIndx.
  7. Сохраняем результат в IndxMaxX.
  8. Повторяем шаги 2-7 для массивов Y и Z, сохраняя результаты в IndxMaxY и IndxMaxZ соответственно.
  9. Бесконечный цикл ENDLESS.
  10. Процедура MaxIndx выполняет поиск максимального элемента в массиве переданном через Array длиной Len.
  11. Возвращаем значение на стеке и завершаем процедуру.
  12. Определение массивов X, Y и Z и их длины.
  13. Объявление переменных IndxMaxX, IndxMaxY и IndxMaxZ.
  14. Конец программы.

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

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