Вывод отрицательного числа из сегмента данных на экран!

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
methode
Сообщения: 1
Зарегистрирован: 15 мар 2011, 20: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)
Вот что есть, однако при выполнении условия, что X<0 (я ввожу -2) выводиться ответ 42 (такой-то и заносится в y), но ведь правильный ответ -42, так вот, как его сделать??? Я ничего не могу додумать. Помогите, завтра отдавать работу надо!

Код: Выделить всё

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
Ответить