0
Nicu Natea
#1
Problema1:
Se vor citi de la tastatura 2 caractere reprezentand un numar decimal. (=> caractere posibile: '0123456789')
Se va afisa ca rezultat valoarea hexadecimala.

exemplu: 
   Introduceti valoarea: 32
   Rezultatule este: 0x20


Parcurs pobleme ramase in 'lucrarea 4'
Reply


0
Nicu Natea
#2
.model small
.stack 100
.data  
text1 db 10, 13, 'Introduceti un numar : $'
text2 db 10, 13, 'Rezultat (in hex): 0x$'
text3 db 10, 13, 'Caracter invalid, introdu altul: $'
asciiTable db '0123456789ABCDEF'
.code
afisareCaracter proc
   push ax
   push bx
   push dx
   lea bx, asciiTable
   and al, 0Fh ; folosim o masca pt a pastra doar ultimii octeti
   xlat        ; luam in al caracterul ascii din asciiTable al <- ds:[bx+al];
   mov ah, 2h  ; dos 21h: 'Write character to STDOUT'
   mov dl, al
   int 21h
   pop dx      ; restauram registrii
   pop bx
   pop ax
   ret
afisareCaracter endp
ascii_to_nr proc
   push dx
   cmp  al, '0'
   jb eroare
  
   cmp  al, '9'
   jb interval_0_9
  
eroare:
   ; afisare: Caracter invalid
   mov ah, 9
   lea dx, text3
   int  21h
  
   ; setam valoarea 0
   mov al, 10
   jmp done
  
interval_0_9:
   sub al, '0'
   jmp done
done:
   pop dx
   ret
ascii_to_nr endp

citeste_nr proc
introdu_alt_nr:
   mov ah, 1
   int 21h
   call ascii_to_nr  
 
   cmp al, 10
   jae introdu_alt_nr
   ret
citeste_nr 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_nr ; numarul citit se afla in al
   mov ah, 0h  ; ax = al
   mov bl, 10  ; inmultim valoarea din ax cu 10
   mul bl
   mov bl, al  ; salveaza rezultatul inmultirii in bl
     
   ; citire caracter2
   call citeste_nr  
   add al, bl   ; al = bl + al; 
  
  
   ; afisare: Rezultat:
   mov ah, 9
   lea dx, text2
   int  21h
   ror al, 4
   call afisareCaracter
   ror al, 4
   call afisareCaracter
  
   ; procedura exit
   mov ah, 4ch
   int  21h
   end start
  
end start
Reply



Forum Jump: