Вот что есть, однако при выполнении условия, что X<0 (я ввожу -2) выводиться ответ 42 (такой-то и заносится в y), но ведь правильный ответ -42, так вот, как его сделать??? Я ничего не могу додумать. Помогите, завтра отдавать работу надо!____|y1, x<0
Y = {y2, x=0
___|y3, x>0
y1=(d*d+x)*b;
y2=(c+b)/d;
y3=(x*x)/(a-b)
Код: Выделить всё
data segment
x db ?
a db 1
b db -3
c db 12
d db 4
y db ?
y1 dw ?
vved db "Vvedite Chislo X: $"
ends
stack segment
dw 128 dup(0)
ends
code segment
include 'emu8086.inc'
start:
mov ax, data
mov ds, ax
mov es, ax
lea dx,vved
mov ah,9
int 21h
printn
call scan_num
mov x,cl
cmp x,-3 ;Sravnenie Operandov x>(-3)
jge m0
jmp exit0
m0:
cmp x,4 ;Sravnenie Operandov x<4
jle m1
jmp exit0
m1:
cmp x,0
jge m2 ;Perehod pri Y>=0
mov al,d ;Zanesenie d v registr
mul al ;d*d
add al,x ;d*d+x
imul b ;(d*d+x)*b
neg ax
mov y1, ax
jmp exit ;Vihod
m2:
cmp x,0
jg m3 ;Perehod pri Y>0
xor ax,ax
mov al,c
add al,b ;c+b
div d ;(c+b)/d
mov y,al
jmp exit1
m3:
mov al,x
mov bl,a
sub bl,b ;a-b
mul al ;x*x
div bl ;(x*x)/(a-b)
mov y,al
jmp exit1
exit0:
print ' Chislo vne zadannogo diapazona!'
mov ax, 4c00h
int 21h
exit:
xor ax,ax
mov ax,y1
print "y="
call print_num_uns
mov ax, 4c00h
int 21h
exit1:
xor ax,ax
mov al,y
print "y="
call print_num_uns
mov ax, 4c00h
int 21h
define_scan_num
define_print_num_uns
end start