Imprime números en Hexadecimal.

Anuncio
pe19_hex.asm
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
1 / 4
;===========================================================================
;===========================================================================
; PROGRAMA
: pe19_hex.asm
; FUNCION
: Programa que imprime números en Hexadecimal.
; REALIZADO POR
: Prof. Juan Juárez Fuentes
; COMPILADOR EN EL QUE SE EJECUTO: TASM 5.0
; FECHA
: 201211185236
;===========================================================================
; DECLARACION DE CONSTANTES
;===========================================================================
CR
EQU
13
LF
EQU
10
IMPRIMIR
EQU
9
FIN
EQU
4C00H
DOS
EQU
21H
TAB
EQU
09H
;===========================================================================
; DECLARACION DEL SEGMENTO DE DATOS
;===========================================================================
DATOS SEGMENT
ENCABEZADO
DB 13,10,13,10,TAB,TAB,"====================================================="
DB 13,10,13,TAB,TAB,"
PROGRAMA QUE IMPRIME NUMEROS EN HEXADECIMAL"
DB 13,10,13,TAB,TAB,"=====================================================",13,10,13,10,"$"
DATOS ENDS
;===========================================================================
; DECLARACION DEL SEGMENTO DE PILA
;===========================================================================
PILA SEGMENT STACK 'STACK'
DB 64 DUP('0')
PILA ENDS
;===========================================================================
; DECLARACION DEL SEGMENTO DE CÓDIGO
;===========================================================================
CODIGO SEGMENT
; Inicio del segmento de código
;----------------------------------------------------------------------pe19_hex PROC NEAR
; Inicio procedimiento pe17_hex
;------------------------------------------------------------------ASSUME CS:CODIGO, SS:PILA, DS:DATOS
ORG 100H
;------------------------------------------------------------------MOV AX,DATOS
; AX=Dirección del segmento de datos
MOV DS,AX
; DS=AX. Indicar el segmento de datos
LEA DX, ENCABEZADO
; DS:DX = dirección de LINEA1
December 13, 2012
Crimson Editor
pe19_hex.asm
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
2 / 4
CALL ESCRIBE
;------------------------------------------------------------------MOV CX, 200H
; Número de veces a repetir el ciclo
XOR DX, DX
; DX = 0
CICLO:
CALL ESCRIBE_HEX
; Imprime el valor en DX
CALL ESCRIBE_CRLF
; Hacer un salto de linea
INC DX
; Incrementar DX
LOOP CICLO
; Regresa al ciclo
;------------------------------------------------------------------CALL SALIR
; Salimos del programa
;------------------------------------------------------------------pe19_hex ENDP
; Fin del procedimiento pe15_cbi
;----------------------------------------------------------------------;---------------------------------------------------------------------; Imprime en Hexadecimal.
; Entrada: DX palabra con el valor a mostrar.
; Llama: ESCRIBE_DIGITO_HEX
;---------------------------------------------------------------------ESCRIBE_HEX PROC NEAR
PUSH AX
; Guardar en el stack los registros que
PUSH CX
; se utilizaron en el procedimiento, para
PUSH DX
; no perder sus valores.
MOV CX,4
; CX = 4 número de digitos a imprimir.
OTRO_DIGITO:
; El ciclo se ejecuta una vez por dígito.
PUSH CX
; Guarda el contador del ciclo.
MOV CL,4
ROL DX,CL
; Rotar el número 4 bits a la izquierda, DX contiene en su nibble mas bajo, el dígito.
CALL ESCRIBE_DIGITO_HEX ; Imprime el dígito
POP CX
; Recupera el contador del ciclo.
; Hacer el ciclo.
LOOP OTRO_DIGITO
POP DX
; Recupera los registros guardados en
POP CX
; el stack
POP AX
RET
; Regresar del procedimiento.
ESCRIBE_HEX ENDP
;----------------------------------------------------------------------; Escibe un dígito Hexadecimal.
; Entrada: DL el nibble menos significativo de DL, el valor del dígito.
; Llama:
;---------------------------------------------------------------------ESCRIBE_DIGITO_HEX PROC NEAR
PUSH AX
; Guarda los registros que queremos preservar.
December 13, 2012
Crimson Editor
pe19_hex.asm
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
3 / 4
PUSH DX
AND DX,0FH
; Apagar el nibble más alto.
CMP DL,10
; Compara con 10.
JAE ES_MAYOR_A_10
; Si es mayo o igual salta.
ADD DL,48
; Suma 48 para imprimir su ASCII si es 0,...9.
JMP IMPRIME_DIGITO
ES_MAYOR_A_10:
ADD DL,55
; Suma 55 para imprimir su ASCII si es A...F.
IMPRIME_DIGITO:
MOV AH,2
; Servicio para imprimir un caracter.
INT 21H
; Llamar a DOS.
POP DX
; Recuperar los registros.
POP AX
RET
; Regresar dle procedimiento.
ESCRIBE_DIGITO_HEX ENDP
;---------------------------------------------------------------------; Hace un CR y un LF
; Entrada:
; Llama:
;---------------------------------------------------------------------ESCRIBE_CRLF PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
; Servicio par aimprimir un caracter.
MOV DL,13
; Caracter 13 = CR
INT 21H
; Llamar a DOS.
MOV DL,10
; Caracter 10 = LF.
INT 21H
; Llamar a DOS.
POP DX
POP AX
RET
; Regresar del procedimiento.
ESCRIBE_CRLF ENDP
;---------------------------------------------------------------------ESCRIBE PROC
; Inicio procedimiento ESCRIBE
MOV AH,9
; Función DOS para escribir texto en pantalla
INT 21H
; Llamar a la interrupción del DOS
RET
; Volver o retornar
ESCRIBE ENDP
; Fin del procedimiento ESCRIBE
;----------------------------------------------------------------------SALIR PROC NEAR
MOV AX,FIN
;Mueve la instruccion para terminar el programa.
INT DOS
;Ejecuta la interrupción.
RET
December 13, 2012
Crimson Editor
pe19_hex.asm
130:
131:
132:
133:
134:
135:
136:
137:
4 / 4
SALIR ENDP
;---------------------------------------------------------------------CODIGO ENDS
;===========================================================================
END pe19_hex
;===========================================================================
;===========================================================================
;===========================================================================
December 13, 2012
Crimson Editor
Descargar