Asembler 8086

0

Witam potrzebuje pomocy.
Poniżej został przedstawiony program do konwersji temperatur prawie wszystko w nim działa tylko jest problem z obliczaniem liczb.
Po podaniu wartości jaką ma obliczyć program wywala losowe liczby zamiast poprawnej wartości.

Co zrobić aby program wyświetlał prawidłowo obliczoną wartość ?

Proszę o pomoc jestem początkujący w assemblerze

.model small
.stack 100h

.data
main_menu db 0dh,0ah,"Konwerter",0dh,0ah
    db "Nacisnij 'C' -> Celsjusz na Fahrenheit",0dh,0ah
    db "Nacisnij 'F' -> Fahrenheit na Celsjusz",0dh,0ah
    db "Nacisnij 'X' -> wyjscie",0dh,0ah
    db "**************************************",0dh,0ah
    db "**************************************",0dh,0ah
    db "Wprowadz swoj wybor",0dh,0ah,'$'
    Num db,0dh,0ah,"Podaj wartosc: ",0dh,0ah,'$'
    Cels db ,0dh,0ah,"Temperatura w Fahrenheit: ",0dh,0ah,'$'
    Fahr db ,0dh,0ah,"Temperatura w Celsjuszach: ",0dh,0ah,'$'
    Fahr2 db ,0dh,0ah,"Temperatura w Celsjuszach: ",0dh,0ah,'-$'
    
    Operand db ?
    
.code

start:
mov ax, @data
mov ds, ax
mov ah,09h
mov dx,offset main_menu
int 21h
mov ah,01h
int 21h
mov Operand,al
mov al,Operand

cmp al,'c'
je celsjusz

cmp al,'f'
je fahrenheit

cmp al,'x'
mov ah,4ch
int 21h

start2:
jmp start

celsjusz:
lea dx,Num
mov ah,09h
int 21h
mov bx,0

celsjusz1:
mov ah,01h
int 21h
cmp al,0dh
je celsjusz2
cmp al,47
jle celsjusz1
cmp al,58
jle celsjusz1
mov dl,al
mov ah,02h
int 21h
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax
jmp celsjusz1

celsjusz2:
pop ax
mov bx,9
mul bx
mov bx,5
div bx
mov bx,32
add ax,bx
push ax
lea dx,Cels   
mov ah,09h
int 21h
pop ax
mov cx,0
mov dx,0
mov bx,10d
jmp break

start3:
jmp start2

fahrenheit:
lea dx,Num
mov ah,09h
int 21h
mov bx,0

fahrenheit3:
mov ah,01h
int 21h
cmp al,0dh
je fahrenheit4
cmp al,47
jle fahrenheit3
cmp al,58
jle fahrenheit3
mov dl,al
mov ah,02h
int 21h
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax
jmp fahrenheit3

fahrenheit4:
pop ax
cmp ax,32
jl fahrenheit2
mov bx,32
sub ax,bx
mov bx,5
mul bx
mov bx,9
div bx
push ax
lea dx,Fahr
mov ah,09h
int 21h
pop ax
mov cx,0
mov dx,0
mov bx,10d
jmp break

start4:
jmp start3

fahrenheit2:
mov bx,20
sub bx,ax
push bx	 
lea dx,Fahr2  
mov ah,09h
int 21h
pop ax
mov cx,0
mov dx,0
mov bx,10d

break:
div bx
push dx
mov dx,0
inc cx
or ax,ax
jne break

ans:   	 
pop dx
add dl,30h
mov ah,02h
int 21h
loop ans

loop start4

exit:
mov ax,4ch
int 21h

end start

1

Akurat asemblerowe programy bajecznie się debugguje - zatem debugger w dłoń Bracie i sprawdzaj, od którego momentu tworzy się zły wynik, jak to odkryjesz to będziesz w stanie analizować, dlaczego tak się dzieje.

0

Odpalasz emu8086 i lecisz instrukcja po instrukcji szukając błędu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1