-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path5.uso de condicionales y loops.asm
144 lines (109 loc) · 3.24 KB
/
5.uso de condicionales y loops.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
138
139
140
141
142
143
144
;*********** METODO PARA IMPRIMIR UNA LETRA N CANTIDAD DE VECES EN N FILAS ***********
.model small
.stack 100h
.data
mensaje1 db "Preciona una tecla:$"
pregunta db "Cuantas veces desea imprimir esa tecla?:$"
pregunta2 db "En cuantas filas desea imprimir esa tecla?:$"
aviso db "Ingreso 0, terminando el programa...$"
tecla db "$"
numero db "$"
num_filas db "$"
auxiliar db "$"
espacio db 0AH,0DH,'$'
coordenada_x db "$"
coordenada_y db "$"
.code
inicio:
mov ax,@data
mov ds,ax
lea dx,mensaje1
call println()
call readline() ;El caracter se guarda en AL
mov tecla,AL
call clear()
lea dx, pregunta
call println() ;El numero se guarda en AL
call readline()
mov numero,AL
call compara()
mov auxiliar, AL
sub numero,30H ;Quito el ascii
sub auxiliar, 30H
call clear()
lea dx,pregunta2
call println()
call readline()
mov num_filas,AL
sub num_filas,30h ;Remover el ascii
call clear()
call imprimir_filas()
halt:
mov ah,4ch
int 21h
;******** METODOS ********
println() proc ;Metodo generico para imprimir
mov ah,09h
int 21h
ret
endp
printtecla() proc ;Metodo para imprimir la tecla.
mov ah,02h ;El servicio 02h imprime el contenido en DL, eso lo hace mas optimo para este caso.
int 21h
ret
endp
readline() proc ;NOTA: Este metodo guarda la entrada por teclado en AL.
mov ah,01h
int 21h
ret
endp
enter() proc ;Metodo generico para crear un enter.
lea dx,espacio
mov ah,09h
int 21h
ret
endp
clear() proc ;Metodo generico para limpiar la pantalla
mov ah,00h
mov al,03h
int 10h
ret
endp
imprimir_filas() proc ;Metodo para imprimir n cantidad de filas
call imprimir_n_cantidad() ;Imprimir n cantidad de letras
call enter()
mov al,auxiliar
mov numero, al
dec num_filas
JNZ imprimir_filas()
ret
endp
imprimir_n_cantidad() proc ;Metodo para imprimir la tecla n cantidad de veces.
mov dl,tecla ;Mueve tecla a DL para prepararla para printtecla().
call printtecla()
dec numero
JNZ imprimir_n_cantidad()
ret
endp
compara() proc
cmp numero, 30h ;Compara numero con 30h(el hex para el numero 0).
je igual_cero() ;Si es verdadero(numero==0)
ret ;Si no es igual a 0, vuelve a donde lo llamaron y continua el programa.
endp
igual_cero() proc ;Metodo para terminar el programa
call clear()
call centrar()
lea dx, aviso
call println()
jmp halt ;Salta a halt para parar la ejecucion
endp
centrar() proc ;Metodo para posicionar el cursor en (x,y) posicion.
mov coordenada_x,15h
mov coordenada_y, 25h
mov ah,02h
mov dh, coordenada_x
mov dl, coordenada_y
int 10h
ret
endp
end