переполнение деления

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

Модератор: Andy

Ответить
Aндрей1
Сообщения: 9
Зарегистрирован: 15 фев 2009, 21:17

Привер: 5(2x-23) + 2. Посмотрите пожалуйста почему не работает, точнее работает, но если прибавить 23. а надо вычесть.

Код: Выделить всё

.MODEL TINY
.STACK 200h
.DATA
	x dw 3
	a dw 5
	b dw 2
	c dw 23
	strbuf db 8 dup('$')

.CODE

; процедура перевода числа в строковое представление
; ax: число, ds:di – адрес буфера для строки
proc dec2str 
		push dx
		push cx

		mov dl, 10
		xor cx, cx

	dec2str_loop1:
		div dl
		push ax
		inc cx
		xor ah, ah
		cmp al, ah
		jnz dec2str_loop1

	dec2str_loop2:
		pop ax
		add ah, '0'
		mov [di], ah
		inc di
		loop dec2str_loop2

		pop cx
		pop dx
		ret
		endp dec2str

program1:
		mov ax, @data
		mov ds, ax

		;вычисление x!
		;mov ax, 1
		;mov cx, [x]
	;loop1:
		;mul cl
		;loop loop1
		
		;вычисление x! + 2x
		mov ax, x
		mul b		;умножаем на *2
		add ax, c	                ;прибавляем +23	; так работает, но надо вычесть!!!
                                ;sub ax, bx              ;если вычесть, то пишет что переполнение деления!!!!
		mul a		;умножаем на *5
		add ax, b
		
		;mov cx, [b]
		;mul ax,cx
		;add ax, cx
		;add ax, cx

		;преобразование y в строку
		mov di, OFFSET strbuf
		push di
		call dec2str

		;вывод строки 
		pop dx
		mov ah, 9
		int 21h

		;завершение программы
		mov ah, 4Ch 
		int 21h
end program1

Ответить