.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