Este programa lo desarrolle para una conocida que estudia en la UCAB, este programa sirve para conocer la posicion instantanea del puntero del Mouse cuando trabajas en modo grafico.
1: .model small
2: .286
3: .stack
4: .data
5:
6: posicionx dw 0
7: posiciony dw 0
8: convx db 'posicion x: '
9: posxasc db 0,0,0
10: db ' posicion y: '
11: posyasc db 0,0,0
12: db 24h; $
13: valor db 0
14: .code
15:
16: ;***********************************************************
17: ; Integrantes: Mariangelica Roa y Maria Mercedes Mongiat
18: ; PROYECTO # 1
19: ; Prof: Jose Musso
20: ;***********************************************************
21:
22:
23:
24:
25:
26: inicio:
27:
28: mov ax,@data ; inicializando ell segmento de data
29: mov ds,ax
30: call pantalla
31: jmp aqui
32:
33: pantalla:
34: mov ax,0600h
35: mov bh,3ah
36: mov cx,0000h
37: mov dx,184fh
38: int 10h
39: mov ah,00
40: mov al,12h ; modo gr fico resolucion 640x480
41: int 10h
42: ret
43:
44: aqui:
45: mov ax,0h ; habilitando el raton
46: int 33h
47: mov ax,01h ; mostrar el cursor
48: int 33h
49:
50: aqui2:
51: mov si,offset posxasc ; cada vez que se mueva el mouse se inicializa la posicionx y saca la posicionx actual
52: mov byte ptr[si],0
53: mov byte ptr[si+1],0
54: mov byte ptr[si+2],0
55: mov si,offset posyasc ; cada vez que se mueva el mouse se inicializa la posiciony y saca la posiciony actual
56: mov byte ptr[si],0
57: mov byte ptr[si+1],0
58: mov byte ptr[si+2],0
59: mov ah,02h ; servicio para mover el cursor en la posicion cx,dx
60: mov bh,0
61: mov dl,0
62: mov dh,27
63: int 10h
64: mov ah,09h ; para refrescar el rea a imprimir
65: mov dx, offset convx
66: int 21h
67: mov ah,01h ; verificar si hay una tecla presionada
68: int 16h
69: jz mostrar
70: call serial
71: jmp fin
72:
73: mostrar:
74: mov ax,03h ; mostrar el estado del mouse
75: int 33h
76: mov posiciony,dx ; int 33,3 guarda en cx la posicion de filas
77: mov posicionx,cx ; y en dx posicion de columnas
78: mov bx,posicionx
79: mov si,offset posxasc
80: call conversion
81: mov bx,posiciony
82: mov si,offset posyasc
83: call conversion
84: mov ah,02h ; servicio para mover el cursor en la ppposicion cx,dx (fila,columna)
85: mov bh,0 ; pagina 0
86: mov dl,0 ; columna 0
87: mov dh,27 ; fila 27
88: int 10h
89: mov ah,09h ; para imprimir
90: mov dx,offset convx
91: int 21h
92: call oscilo
93: jmp aqui2
94: jmp fin
95:
96: conversion: ; CONVERSION DE HEX A ASC
97: cmp bx,0
98: je noconversion
99: inc byte ptr[si+2]
100: cmp byte ptr[si+2],9 ; ¨byte ptr[si+2]>9?
101: jb decpos ; decremento posicion
102: mov byte ptr[si+2],0 ; le asigno 0 a byte ptr[si+2]
103: inc byte ptr[si+1]
104: cmp byte ptr[si+1],9 ;¨byte ptr[si+1]>9?
105: jb decpos ; decremento posicion
106: mov byte ptr[si+1],0 ; le asigno a byte ptr[si+1]
107: inc byte ptr[si] ; el m ximo valor de si oscila entre 6 y 7
108:
109: decpos:
110: dec bx
111: jmp conversion
112:
113: noconversion:
114: or byte ptr[si],30h ; apunta al parametro byte apuntado por si
115: or byte ptr[si+1],30h
116: or byte ptr[si+2],30h
117: ret
118:
119: oscilo:
120: mov ax,posiciony ; la m x posicion de y es 640/16 da 40
121: mov cl,40 ; si el valor que entra a posiciony es dividido
122: div cl ; entre 40 me va a decir en que columna estoy
123: mov bx,ax
124: ror bx,4
125: mov cx,0
126: mov ax,0
127: mov ax,posicionx ; la m x posicion de x es 480/16 da 30
128: mov cl,30 ; si el valor que entra a posicionx es dividido
129: div cl ; entre 30 me va a decir en que fila estoy
130: mov bl,al
131: mov valor,bl
132: mov dx,378h
133: out dx,ax
134: ret
135:
136: serial:
137: mov ah,0
138: mov al,11110111b ;(111)9600 baudios,(10)no (paridad)
139: int 14h ;(1)2 bits de parada, (11) 8 bits de datos
140: jmp envio
141:
142: envio:
143: mov ah,1
144: mov al,valor
145: int 14h
146: mov dx,3F8h
147: out dx,al
148:
149:
150: fin:
151:
152: mov ah,0 ; reestablecer modo texto
153: mov al,3
154: int 10h
155: mov ax,4c00h
156: int 21h
157: end inicio
158:
159: end
No hay comentarios:
Publicar un comentario