Ассемблер верно считает только маленькие неотрицательные числа

Программа должна считать выражение (22/c+3*b)/(36-a*c/3). Ответ она выдает, но неверный. Если вводить маленькие неотрицательные числа(~ до 10), то считает верно, но с остальными беда. В чем может быть проблема?

 .MODEL Large,C
    .data
    Extrn   aaaS:byte,cccS:byte,bbbS:byte,denom:word,num:word,result:word;
    .code
    Public  Lab3S
Lab3s   proc    far


    mov ax,22
    div cccS
    mov bx,ax
    mov ax,3
    mul bbbS
    add ax,bx
    mov ah,0
    mov num,ax


    mov bl,36
    mov al,aaaS
    mul cccS
    mov dl,3
    div dl
    sub bl,al
    mov bh,0
    mov denom,bx

    mov dx,0
    mov ax,num
    mov bx,denom
    div bx
    mov result,ax

    ret
Lab3S   endp
    end

Ответы (1 шт):

Автор решения: VKRAVGIVNO

Проблема была в памяти. Надо было использовать CWD и CBW.

.MODEL Large,C
        .data
        Extrn   aaaS:byte,cccS:byte,bbbS:byte,denom:word,num:dword,result:word;
        .code
        Public  Lab3S
    Lab3s   proc    far
        mov ax,22
        div cccS
        cbw
        mov bx,ax
        mov al,3
        mul bbbS
        add bx,ax
        cwd
        mov word ptr num,ax
        mov word ptr num+2,dx
    
        mov al,cccS
        mov ah,0
        mov bx,3
        div bx
        mul aaaS
        mov cx,36
        sub cx,ax
        mov denom,cx
        mov dx,word ptr num+2
        mov ax,word ptr num
           idiv denom
           mov result,ax
    
        ret
    Lab3S   endp
        End
→ Ссылка