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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д