Specifications

MICROPROCESSADORES
EXEMPLOS E EXECRCÍCIOS
6
Luís Miguel Charrua Figueiredo 6 - 8 E.N.I.D.H.
WRITE_HEX PROC
PUSH CX ;coloca na stack o valor do registo CX
PUSH DX ;coloca na stack o valor do registo DX
MOV DH,DL ;move o valor do registo DL para o registo DH
MOV CX,4 ;move o valor 4 para o registo CX
SHR DL,CL
CALL WRITE_HEX_DIGIT ;mostra no ecran o primeiro número hexadecimal
MOV DL,DH ;move o valor do registo DH para o registo DL
AND DL,0Fh
CALL WRITE_HEX_DIGIT ;mostra no ecran o segundo número hexadecimal
POP DX ;retira da stack o valor do registo DX
POP CX ;retira da stack o valor do registo CX
RET ;Retorna o controlo ao procedimento que chamou
WRITE_HEX ENDP
PUBLIC WRITE_HEX_DIGIT
;......................................................................;
;Este procedimento converte os 4 bits mais baixos do registo DL ;
;para um número hexadecimal e o mostra no ecran do computador ;
;Use: WRITE_CHAR ;
;......................................................................;
WRITE_HEX_DIGIT PROC
PUSH DX ;coloca na stack o valor de DX
CMP DL,10 ;compara se o número de bits é menor do que 10
JAE HEX_LETTER ;se não, salta para HEX_LETER
ADD DL,"0" ;se sim, converte para número
JMP Short WRITE_DIGIT ;escreve o caracter
HEX_LETTER:
ADD DL,"A"-10 ;converte um caracter para hexadecimal
WRITE_DIGIT:
CALL WRITE_CHAR ;imprime o caracter no ecran
POP DX ;Retorna o valor inicial do registo DX
;para o registo DL
RET ;Retorna o controlo ao procedimento que chamou
WRITE_HEX_DIGIT ENDP
PUBLIC WRITE_CHAR
;......................................................................;
;Este procedimento imprime um caracter no ecran usando o D.O.S. ;
;......................................................................;
WRITE_CHAR PROC
PUSH AX ;Coloca na stack o valor do registo AX
MOV AH,2 ;Função 2h
INT 21h ;Interrupção 21h
POP AX ;Extrai da stcak o valor de AX
RET ;Retorna o controlo ao procedimento que chamou
WRITE_CHAR ENDP
END TEST_WRITE_HEX ;Finaliza o programa