Cложение в цикле.

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
boly
Сообщения: 1
Зарегистрирован: 25 июн 2009, 20:23

Дали задание:
Есть массив М = {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
Ответить