Есть массив М = {15, 1, 3, 7, -2, 6, 12, 10, 9, 3}, есть функция Y=(m1-m2)x + (m2-m3)2x + ... + (m9 - m10)9x, коэффициент x=2, с клавиатуры вводится, сколько раз складывать (m1-m2)x + (m2-m3)2x + ...
Почти все работает, только неправильно складывает, точнее, правильно складывает первые 2 раза, а потом какая-то фигня, пробовал менять числа в массиве, был замечен косяк, что неправильно складывает, когда меняется число разрядов или знак промежуточного результата - что-то типа того посмотрите пожалуйста, может, найдете ошибку..
Код: Выделить всё
model small
.data
mas db 15,1,3,7,-2,6,12,10,9,3,'$' ;Инициализируем массив. Размер каждого элемента байт
nl db 10, 13, '$'
.stack 256
.code
prntn proc
push ax
mov ah,09h ;110
lea dx, nl ;вывод перевод на новую строчку
int 21h
P:
mov ah,0
pop ax ;112
xor cx,cx
XOR dx,dx
XOR bx,bx
cmp ax,0
jnl upper
NEG ax
upper:
xor bx,bx
mov bx,000Ah
dvsn:
XOR dx,dx
div bx
push dx
inc cx
or ax,ax
jnz dvsn
mov ah,02h
cicl:
pop dx
add dx,30h
int 21h
loop cicl
RET
prntn endp
main proc
mov ax,@data
mov ds,ax
xor ax,ax
xor dl,dl
mov ah,1
int 21h
mov dl,al
and ax,0fh
lea bx,mas
xor cx,cx
mov cx,ax
mov ax,cx
and ax,0fh
xor ax,ax
push ax
xor dx,dx
mov dx,1
push dx
@1:
xor dx,dx
mov ax,[bx]
mov dx,[bx+1]
sub ax,dx
pop dx
xor bx,bx
mov bx,dx
add bx,1
push ax
xor ax,ax
mov ax,dx
mov dx,2
imul dl
mov dx,ax
pop ax
imul dl
pop dx
add dx,ax
push dx
push bx
;call prntn
xor ax,ax
xor bx,bx
mov ax,[bx]
inc bx
loop @1
pop bx
pop ax
call prntn
;xor ax,ax
;mov al, mas
mov ax,4c00h
int 21h
main endp
end main