HEX a DEC

di il
2 risposte

HEX a DEC

Salve, a scuola abbiamo scritto un programma in assembler 8086, dove l'utente inserisce prima un numero, poi il secondo e infine l'operando. Per permettere al programma di leggere i numeri, vanno ovviamente convertiti in codice ascii. Il risultato lo salviamo nei vari registri (dipendentemente dal operando). Adesso la seconda parte è prendere il risultato salvato e mostrarlo sullo schermo. Il problema è che non sappiamo fare il metodo inverso di ciò che abbiamo fatto all'inizio per leggere i numeri. Ci hanno suggerito di usare la memoria stack, ma siamo a corto di idee.
Aiuti?
Questo è il programma:

data segment
stev1 dw ?
stev2 dw ? 
niz db "Inserisci il primo numero:  $"
niz2 db "Inserisci il secondo numero:  $"
niz3 db "Inserisci l'operando:  $"
ends
code segment
start:

newLine macro 
mov dl,13d
mov ah,02h
int 21h
mov dl,10d
int 21h
endm


mov ax, data
mov ds,ax
lea dx,niz     
mov ah,09h
int 21h

;inserimento 
mov ch,00h
mov bl,0    

while:                                                               
mov ah,01                             
int 21h
sub al,48    
cmp al,221d
je endwhile    
inc bl 
cmp bl,1      
jne next
mov cl,al        
jmp while

next:
cmp bl,2     
js endif 
mov dl,al
mov ah,00h
mov al,10   
mul cl 
mov dh,00h
add ax,dx
mov cx,ax 

endif:
jmp while

endwhile:
mov stev1,cx   

;end inserimento  
newLine
lea dx,niz2
mov ah,09h               
int 21h   

;inserimento2  
mov ch,00h
mov bl,0    

while2:  
mov ah,01
int 21h
sub al,48  
cmp al,221d
je endwhile2    
inc bl 
cmp bl,1
jne next2
mov cl,al                  
jmp while2

next2:
cmp bl,2
js endif2 
mov dl,al
mov ah,00h
mov al,10
mul cl 
mov dh,00h
add ax,dx
mov cx,ax

endif2:
jmp while2

endwhile2:
mov stev2,cx     

;end inserimento
newLine
lea dx,niz3
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'+'
je addizione
cmp al,'-'
je sottrazione
cmp al,'*'
je moltiplicazione
cmp al,'/'
je divisione

addizione:
mov bx,stev1
mov cx,stev2
add bx,cx      
mov dh,00h
mov dx,bx
mov ah,02h   
int 21h
jmp endd      

sottrazione:
mov bx,stev1
mov cx,stev2
sub bx,cx      
jmp endd

moltiplicazione:
mov ax,stev1
mul stev2     
jmp endd

divisione: 
mov dx,0000h 
mov ax,stev1
div stev2     
jmp endd

endd:


ends

end start

2 Risposte

  • Re: HEX a DEC

    Push risultato

    mov al, ...
    il valore che deve essere messo a video lo si mette nel registro desiderato:
    pop bx ...ad esempio
    int 21h .... per display a video


    push e pop mettono e tolgono dallo stack
  • Re: HEX a DEC

    Hai varie opzioni, dai un'occhiata alle

    02 - Write character to STDOUT
    09 - Write string to STDOUT
Devi accedere o registrarti per scrivere nel forum
2 risposte