Ассемблер верно считает только маленькие неотрицательные числа
Программа должна считать выражение (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