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