0
Nicu Natea
#1
Se citesc 2 caractere in hexa: ex. FF
Programul va afisa rezultatul: ex. 255


.model small
.stack 100
.data  
text1 db 10, 13, 'Introduceti un numar in hexa: $'
text2 db 10, 13, 'Rezultat: $'
text3 db 10, 13, 'Caracter invalid, introdu altul: $'
.code
ascii_to_hex proc
   push dx
   cmp  al, '0'
   jb eroare
  
   cmp  al, '9'
   jb interval_0_9
  
   cmp  al, 'A'
   jb eroare
  
   cmp  al, 'F'
   jbe interval_A_F_uppercase
  
   cmp  al, 'a'
   jb eroare
  
   cmp  al, 'f'
   jbe interval_a_f_lowercase
  
eroare:
   ; afisare: Caracter invalid
   mov ah, 9
   lea dx, text3
   int  21h
  
   ; setam valoarea 0
   mov al, 10h
   jmp done
interval_a_f_lowercase:
   sub al, 87 ; 'A' - 10
   jmp done
interval_A_F_uppercase:
   sub al, 55 ; 'A' - 10
   jmp done
  
interval_0_9:
   sub al, '0'
   jmp done
done:
   pop dx
   ret
ascii_to_hex endp

citeste_hex proc
introdu_alt_nr:
   mov ah, 1
   int 21h
   call ascii_to_hex  
 
   cmp al, 10h
   jae introdu_alt_nr
   ret
citeste_hex endp
start:
   mov  ax, @data
   mov  ds, ax
   ; afisare: Introduceti un numar in hexa:
   mov ah, 9
   lea dx, text1
   int  21h
   ; citire caracter1
   call citeste_hex
   mov bl, al  ; salvam rezultatul in bl
   shl bl, 4   ; mutam rezultatul in partea high a bl
     
   ; citire caracter2
   call citeste_hex  
   or bl, al   ; bl = bl | al;
  
  
   mov cx, 0
   mov al, bl
   mov dx, 0
  
reia:  
   mov ah, 0 
   mov dl, 10
   div dl     ; impartim la 10
   mov dl, ah ; salvam restul impartirii in dl
   push dx    ; salvam restul impartirii pe stiva
   inc cx     ; salvam numarul de caractere impinse pe stiva
   cmp al, 0
   jne reia
   ; in principiu daca numarul intial era 126,
   ; pe stiva am fi pus : 6 2 1 iar in cx am avea valoarea 3
  
   ; afisare: Rezultat
   mov ah, 9
   lea dx, text2
   int  21h
  
afiseaza_rez:
   pop dx     ; pop de pe stiva a resturilor / 'in ordine inversa'
   add dl, 48 ; dl + '0' conversie in ascii
   mov ah, 2
   int 21h
loop afiseaza_rez
  
   ; procedura exit
   mov ah, 4ch
   int  21h
   end start
  
end start
Reply



Forum Jump: