Specifications

MICROPROCESSADORES
EXEMPLOS E EXECRCÍCIOS
6
Luís Miguel Charrua Figueiredo 6 - 9 E.N.I.D.H.
Exemplo 4
Este programa mostra no ecran os números 12345.
;nome do programa: four.asm
.model small
.stack
.code
TEST_WRITE_DECIMAL PROC
MOV DX,12345 ;Move o valor decimal 12345 para o registo DX
CALL WRITE_DECIMAL ;Chama o procedimento
MOV AH,4CH ;Função 4Ch
INT 21h ;Interrupção 21h
TEST_WRITE_DECIMAL ENDP ;Finaliza o procedimento
PUBLIC WRITE_DECIMAL
;.................................................................;
;Este procedimento escreve um número de 16 bit como um número ;
;sem sinal em notação decimal ;
;Use: WRITE_HEX_DIGIT ;
;.................................................................;
WRITE_DECIMAL PROC
PUSH AX ;Põe na stack o valor do registo AX
PUSH CX ;Põe na stack o valor do registo CX
PUSH DX ;Põe na stack o valor do registo DX
PUSH SI ;Põe na stack o valor do registo SI
MOV AX,DX ;move o valor do registo DX para AX
MOV SI,10 ;move o valor 10 para o registo SI
XOR CX,CX ;coloca o registo CX a zero
NON_ZERO:
XOR DX,DX ; coloca o registo DX a zero
DIV SI ;divisão entre SI
PUSH DX ;Põe na stack o valor do registo DX
INC CX ;incrementa CX
OR AX,AX ;não zero
JNE NON_ZERO ;salta para NON_ZERO
WRITE_DIGIT_LOOP:
POP DX ;Retorna o valor em modo inverso
CALL WRITE_HEX_DIGIT ;Chama o procedimento
LOOP WRITE_DIGIT_LOOP ;loop
END_DECIMAL:
POP SI ;retira da stack o valor do registo SI
POP DX ;retira da stack o valor do registo DX
POP CX ;retira da stack o valor do registo CX
POP AX ;retira da stack o valor do registo AX
RET ;Retorna o controlo ao procedimento que chamou
WRITE_DECIMAL ENDP ;Finaliza o procedimento