-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathImprimirNum.asm
137 lines (98 loc) · 1.63 KB
/
ImprimirNum.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
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
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
130
131
132
133
134
135
136
137
.module ImprimirNum
;Biblioteca de impresion de numeros(complementaria de print.asm)
teclado .equ 0xFF02
pantalla .equ 0xFF00
.globl imprimir_Num
; imprime_decimal
; imprime en decimal el numero contenido en D interpretado sin signo
;
; Entrada: D -> Numero de 16 bit sin signo
; Salida: ninguna
; Registros afectados: D y CC
imprimir_Num:
pshs x,y
ldx #0x0000 ; para almacenar d
ldy #0x0000 ; para almacenar d
;Se mete la variable primera en la pila de usuario
;Tercera CIFRA
centenas_cifra:
;Le resta 100 en 100 hasta dar C
subd #100
bcs imprime_centenas_cifra
exg d,x
incb
exg d,x
bra centenas_cifra
imprime_centenas_cifra:
exg d,x
tstb
bne imprime_centenas
; es 0
exg d,y
tstb
exg d,y
beq centenas_cero
;Si es 0 es no ha habido una cifra
imprime_centenas:
addb #'0
stb pantalla
exg d,y
incb
exg d,y
centenas_cero:
exg d,x
;Se le añade lo que no debio de ser restado
addd #100
;Contador a 0
exg d,x
ldd #0
exg d,x
;Segunda CIFRA
decenas_cifra:
;Le resta 10 en 10 hasta dar C
subd #10
bcs imprime_decenas_cifra
exg d,x
incb
exg d,x
bra decenas_cifra
imprime_decenas_cifra:
exg d,x
tstb
bne imprime_decenas
; es 0
exg d,y
tstb
exg d,y
beq decenas_cero
;Si es 0 es no ha habido una cifra
imprime_decenas:
addb #'0
stb pantalla
exg d,y
incb
exg d,y
decenas_cero:
exg d,x
; se le añade lo que no debio de ser restado
addd #10
; contador a 0
exg d,x
ldd #0
exg d,x
;Primera cifra
unidades:
subd #1
bcs imprime_unidades
exg d,x
incb
exg d,x
bra unidades
imprime_unidades:
exg d,x
addb #'0
stb pantalla
exg d,x
; RETORNO
puls x,y
rts