Неправильно работает программа в ассемблере
Вместо вычисления суммы всех положительных чисел массива и нахождения минимального отрицательного элемента массива и его местоположения, программа у меня вычисляет сумму всех отрицательных чисел массива и находит местоположение самого максимального положительного. Где я ошибся ?
cseg segment
assume cs:cseg,ds:cseg,es:cseg
org 0
start: jmp beg
mas1 dw 7,-2,4,5,-8
dw 2,4,-1,-9,2
dw 7,8,9,-4,-2
dw 4,5,6, 2,-1
lenx dw 5
leny dw 4
sum dw 0
max dw 0
sign db '+'
mess1 db "Sum of negative is $"
mess2 db "Max of positive is $"
beg: mov ax,cs
mov ds,ax
mov es,ax
cld
mov ax,lenx
mov cx,leny
mul cx
mov cx,ax
mov max,0
mov sum,0
mov si,offset mas1; начало данных
m1:
lodsw
or ax, ax
jns m2
add [sum], ax
jmp next
m2:
cmp ax, [max]
jle next
mov [max], ax
next:
loop m1
mov dx,offset mess1
mov ah,9
int 21h
mov ax,sum
call printval
mov dx,offset mess2
mov ah,9
int 21h
mov ax,max
call printval
mov ax,4C00h
int 21h
printval:
push bx
mov bx, 10
xor cx, cx ;символов в модуле числа
or ax, ax
jns @@div
neg ax
push ax
mov ah, 02h
mov dl, '-'
int 21h
pop ax
@@div:
xor dx, dx
div bx
push dx
inc cx ;количество цифр в числе
or ax, ax
jnz @@div
mov ah, 02h
@@store:
pop dx
add dl, '0'
int 21h
loop @@store
pop bx
ret
cseg ends
end start