Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
cursor macro page,row,column ;posicionamos el cursor mov ah,02 mov bh,page mov dh,row mov dl,column int 10h endm visibleInput macro ;entradas de valores mov ah,01 int 21h endm notVisibleInput macro ;entradas de valores pero sin mostrarlos mov ah,07 int 21h endm defineSize macro size,source ;definimos la cantidad de elementos de un array mov cx,size mov si,source endm addValues macro ;llenamos el array mov array[si],al inc si endm printText macro msg ;imprimir cadenas mov ah,09 lea dx,msg int 21h endm next macro nxt ;salto de linea mov ah,09 lea dx,nxt int 21h endm oneDigitAddition macro msg1,msg2,msg3 ;suma de un digito con resultado de dos digitos printText msg1 visibleInput sub al,30h mov bl,al printText msg2 visibleInput sub al,30h add al,bl ;ajuste para la suma aaa or ax,3030h mov bx,ax sub bh,01h printText msg3 ;impresion parte alta mov ah,02h mov dl,bh int 21h ;impresion parte baja mov ah,02 mov dl,bl int 21h endm twoDigitsAddition macro msg1,msg2,msg3 ;suma de dos digitos con resultado de tres digitos printText msg1 visibleInput sub al,30h mov bl,al visibleInput sub al,30h mov cl,al ;ingresa segundo numero printText msg2 visibleInput sub al,30h add bl,al visibleInput sub al,30h add cl,al printText msg3 mov ax,cx aam mov cx,ax add bl,ch mov ax,bx aam mov bx,ax mov ah,02h mov dl,bh add dl,30h int 21h mov ah,02h mov dl,bl add dl,30h int 21h mov ah,02h mov dl,cl add dl,30h int 21h endm randomNumbers macro n ;numeros aleatorios del 0 al 9 mov ah,2ch int 21h xor ax, ax mov dh, 00h add ax, dx aaa add ax, 3030h mov n, al lea dx, n mov ah, 09h int 21h endm dateAndHour macro ;fecha y hora actual del sistema operativo ;GUARDAMOS VARIABLES EN HEXADECIMAL ;Servivio Hora mov ah, 2Ch int 21h mov offset horas, ch mov offset minutos, cl mov offset segundos, dh ;servicio Fecha mov ah, 2Ah int 21h mov offset dia_semana, al mov offset anio, cx mov offset mes, dh mov offset dia_mes, dl jmp Mostrar_Dia_Semana ;RUTINAS Mostrar_Dia_Semana: ;Obtener el numero del dia de la semana y guardarlo en CX mov cl, [dia_semana] mov ch, 0 ;Obtener la direccion de memoria del vector de dias ;Y le sumamos el dia de la semana multiplicado por 10 ;Para obtener la direccion exacta del dia en el vector mov bx, offset msj_dia_semana mov ax, cx mov cl, 0Ah mul cx add bx, ax mov ah, 09 mov dx, bx int 21h Mostrar_Dia: ;Obtener el numero del dia del mes ;Dividimos entre 10 para obtener el numero en decimal ;Luego lo transformamos a ASCII mov al, [dia_mes] mov cl, 10 mov ah, 0 div cl or ax, 3030h mov bx, offset dia_mes_conv mov [bx], al inc bx mov [bx], ah mov ah, 09 mov dx, offset dia_mes_conv int 21h Mostrar_Mes: ;Obtener el numero del mes, y guardarlo en CX mov cl, [mes] add cl, 2 mov ch, 0 ;Obtener la direccion de memoria del vector de mes ;Y le sumamos el numero del mes multiplicado por 12 ;Para obtener la direccion exacta del mes mov bx, offset msj_mes mov ax, cx mov cl, 08h mul cx add bx, ax sub bx, 08h mov ah, 09 mov dx, bx int 21h Mostrar_Anio: ;Obtener el numero del anio actual ;AL = 201 | AH = 1 ;Hay que ir dividiendo entre 10 el registro AL para ir guardando ;digito por digito y asi guardarlo en variables separadas ;para que posteriormente se le pueda hacer un OR 3030h y obtener el ASCII mov bx, offset anio mov ax, [bx] mov cl, 10 div cl mov dig1, ah mov ah, 0 mov cl, 10 div cl mov dig2, ah mov ah, 0 mov cl, 10 div cl mov dig3, ah mov ah, 0 mov cl, 10 div cl mov dig4, ah or dig4, 30h or dig3, 30h or dig2, 30h or dig1, 30h ;Imprimimos el anio numero por numero mov ah, 09 mov dx, offset dig4 int 21h mov dx, offset dig3 int 21h mov dx, offset dig2 int 21h mov dx, offset dig1 int 21h mov dx, offset salto_linea int 21h jmp Mostrar_Hora Mostrar_Hora: ;Obtener el numero de la hora ;Comparamos si es mayor o igual a 12 para cambiar formato mov ah, 09 mov dx, offset msj_hora int 21h mov al, [horas] cmp al, 0Ch jae cambia_formato formato_normal: mov tipo_formato, 0 ;El formato es "AM" mov cl, 10 mov ah, 0 div cl or ax, 3030h mov bx, offset horas_conv mov [bx], al inc bx mov [bx], ah mov ah, 09 mov dx, offset horas_conv int 21h Mostrar_minutos: ;Obtener el numero de minutos ;Hacer lo mismo que con el dia del mes mov ah, 09 mov dx, offset msj_separador int 21h mov al, [minutos] mov cl, 10 mov ah, 0 div cl or ax, 3030h mov bx, offset min_conv mov [bx], al inc bx mov [bx], ah mov ah, 09 mov dx, offset min_conv int 21h Mostrar_segundos: ;Obtener el numero de segundos ;Hacer lo mismo que con minutos mov ah, 09 mov dx, offset msj_separador int 21h mov al, [segundos] mov cl, 10 mov ah, 0 div cl or ax, 3030h mov bx, offset seg_conv mov [bx], al inc bx mov [bx], ah mov ah, 09 mov dx, offset seg_conv int 21h mov bx, offset tipo_formato add bl, formato mov dx, bx int 21h mov ah, 4ch int 21h cambia_formato: sub al, 0Ch mov formato, 4 ;El formato es "PM" jmp formato_normal ;****************************** FIN ************************* ;Variables para guardar los valores en hexadecimal horas DB ?, '$' minutos DB ?, '$' segundos DB ?, '$' dia_semana DB ?, '$' dia_mes DB ?, '$' mes DB ?, '$' anio DB ?, ?, '$' formato DB ? ;Variables convertidas a ASCII dia_mes_conv DB ?, ?, " de ", '$' anio_conv DB ?, ?, '$' horas_conv DB ?, ?, '$' min_conv DB ?, ?, '$' seg_conv DB ?, ?, '$' dig1 DB ?, '$' dig2 DB ?, '$' dig3 DB ?, '$' dig4 DB ?, '$' ;Variables que contienen cadena de caracteres ;msj_dia_semana = 10 caracteres por casilla ;msj_dia_semana = 11 caracteres por casilla msj_hora DB "Hora: ",'$' msj_separador DB " :",'$' msj_dia_semana DB "Domingo $","Lunes $","Martes $","Miercoles$","Jueves $","Viernes $","Sabado $" msj_mes DB "Enero del $","Febrero del $","Marzo del $","Abril del $","Mayo del $","Junio del $","Julio del $", "Agosto del $","Septiembre del $","Octubre del $","Noviembre del $","Diciembre del $" tipo_formato DB " am$", " pm$" salto_linea DB 0Ah, 0Dh,'$' endm diagonal macro ;dibujar una diagonal con colores mov cx,1 mov al,13h mov ah,0 int 10h ;establece los graficos del modo de video bucle1: mov dx,cx mov al,color ;AL=color de los pixeles mov ah,0ch ;cambiar el color para un solo pixel int 10h ;establecer pixel cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal) jz fin inc cx ;DX=fila. add color,2 ;para cambiar colores jmp bucle1 ;CX=column fin: ret color db 1 endm clr macro ;limpiar pantalla mov ah,06h mov al,00h mov bh,07h mov cx,00h mov dh,25h mov dl,80h int 10h endm emptyAll macro ;vaciamos registros mov ax,0000h mov bx,0000h mov cx,0000h mov dx,0000h endm emptyAX macro ;vaciamos registros mov ax,0000h endm emptyBX macro ;vaciamos registros mov bx,0000h endm emptyCX macro ;vaciamos registros mov cx,0000h endm emptyDX macro ;vaciamos registros mov dx,0000h endm endProgram macro ;terminar programa mov ah,4ch int 21h endm