lunes, 31 de mayo de 2010

Digitales III

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