Divide by zero assembler Откуда вообще ошибка
Формулировка задачи:
Доброго времени суток, с наступающим ! Буду признателен в помощи решения ошибки..
5. Протабулировать функцию у(x), заданную в виде:
y(x) = ах + b , если 1 < x <= 5
y(x) = bx + а , если 5 < x <= 10
где а - max(A(I)), а в - max(B(I)); I=1,2,...,5 Нахождение max оформить в виде подпрограммы Шаг табуляции x=1.
Уже обращался по этому заданию, но с той ошибкой всё было решено, теперь деление на ноль, откуда вообще?
Подозрение что, что-то не так с командой mull, и регистром dx.. при двубайтовом умножении, но если это так, как исправить?
Изначально было мною задумано создать две подпрограммы расстонвки по возрастанию из пяти элементов данных массивов,и брать в итоге 4-ые элементы массивов, и уже через них табулировать.
.model small
.386
.data
mas dw 6,11,9,8,3
mas1 dw 4,7,9,4,1
masx dw 2,3,4,5,6,7,8,9,10
len1 equ 9
len equ $-mas
tmp dw 0
tmp1 dw 0
res db 5 dup(?)
res1 db 5 dup(?)
resy dw 9 dup(?)
.stack 100h
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
xor si,si
xor di,di
mov cx,len1
pdp proc
mov cx,len
dec cx
big:
push cx
xor si,si
xor di,di
cyc:
mov ax,mas[si]
cmp ax,mas[si+1]
jbe m1
mov bx,mas[si]
mov tmp,bx
mov bx,mas[si+1]
mov mas[si],bx
mov bx,tmp
mov mas[si+1],bx
m1:
inc si
loop cyc
cld
lea si,mas
lea di,res
mov cx,len
rep movsb
pop cx
loop big
retn 4
pdp endp
pdp1 proc
mov cx,len
dec cx
big1:
push cx
xor di,di
xor si,si
cyc1:
mov ax,mas1[di]
cmp ax,mas1[di+1]
jbe m2
mov bx,mas1[di]
mov tmp1,bx
mov bx,mas1[di+1]
mov mas[di],bx
mov bx,tmp1
mov mas1[di+1],bx
m2:
inc di
loop cyc
cld
lea di,mas
lea si,res1
mov cx,len
rep movsb
pop cx
loop big1
retn 4
pdp1 endp
begin:
call pdp
call pdp1
xor si,si
xor di,di
mov dx,0
cycl:
mov bx,masx[si] ; ax=masx[si]
cmp bx,5 ; сравнивается элемент массива с 5
jg new ; переход если больше на new
mov ax,mas[4] ; умножение ax
mul bx ; результат сохраняется в ax
add ax,bx
mov resy[di],ax
jmp nxt
new:
mov ax,mas1[4]
mul bx
mov bx,mas[4]
add ax,bx
mov resy[di],ax
nxt:
inc di
inc si
loop cycl
exit:
mov ax,4c00h
int 21h
end startРешение задачи: «Divide by zero assembler Откуда вообще ошибка»
textual
Листинг программы
.model small .386 .data ;................................ .stack 100h .code pdp proc ;...................... pdp endp pdp1 proc ;...................... pdp1 endp start: mov ax,@data mov ds,ax ;................................ exit: mov ax,4c00h int 21h end start