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

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы