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


Digitales III – Prof. Nando Vitti – 2ª evaluacion

Revisar definicion del segmento de datos para conocer la funcionalidad, basicamente era introducir una lista de numeros, los podias ordenar y sacar el promedio de los numeros que escribiste.

   1:                  .MODEL SMALL


   2:                  .STACK 64H


   3:                  .DATA


   4:  SWITCHE         DB 0


   5:  CONTADOR        DW ?


   6:  TABLA           DB 40 DUP (?)


   7:  TABLAHEX        DB 20 DUP (?)


   8:  TABLAHEX2       DB 20 DUP (?)


   9:  PANTALLA3       DB "            EL PROMEDIO DE LOS NUMEROS INTRODUCIDOS ES "


  10:  PROMEDIO        DB 0,0


  11:                  DB 24H


  12:  TABLAORD        DB 80 DUP (?)


  13:                  DB 24H


  14:  LINEA1          DB " ******** INTRODUCE LOS NUMEROS Y PRESIONE ENTER PARA FINALIZAR ******** ",24H


  15:  PANTALLA1       DB 79 DUP ("="),10,13


  16:                  DB 79 DUP ("="),10,13


  17:                  DB "******** PRACTICA N¦ 2. MANEJO DE INSTRUCCIONES, TECLADO Y PANTALLA ********",10,13


  18:                  DB 10,13


  19:                  DB 10,13,24H


  20:  PANTALLA2       DB "                    1. INTRODUCIR NUMEROS",10,13


  21:                  DB "                    2. ORDENAR NUMEROS",10,13


  22:                  DB "                    3. PROMEDIAR",10,13


  23:                  DB 10,13


  24:                  DB 10,13


  25:                  DB "                    INDIQUE LA OPCION: ",24H


  26:                  


  27:                  


  28:   


  29:   


  30:                  .CODE


  31:                  MOV AX,@DATA


  32:                  MOV DS,AX


  33:                  MOV ES,AX


  34:                  CALL MODO


  35:                  MOV AL,25


  36:                  MOV CX,0


  37:                  CALL SCREEN


  38:                  LEA DX,PANTALLA1


  39:                  MOV AH,9


  40:                  INT 21H


  41:  OPCIONES:       MOV DH,7


  42:                  MOV DL,0


  43:                  CALL CURSOR


  44:                  LEA DX,PANTALLA2


  45:                  MOV AH,9


  46:                  INT 21H


  47:                  MOV AH,0


  48:                  INT 16H


  49:                  CMP AL,"1"


  50:                  JE OPCION1


  51:                  CMP AL,"2"


  52:                  JE OPCION2


  53:                  CMP AL,"3"


  54:                  JE OPCION3


  55:                  CMP AL,1BH


  56:                  JE SALIR


  57:                  JMP OPCIONES


  58:   


  59:  OPCION1:        MOV SWITCHE,1


  60:                  CALL LIMPIAR


  61:                  CALL INTRODUCIR


  62:                  CALL ASC2HEX


  63:                  CALL LIMPIAR


  64:                  JMP OPCIONES


  65:   


  66:  OPCION2:        CMP SWITCHE,0


  67:                  JE SALTA


  68:                  CALL LIMPIAR


  69:                  CALL ORDENAR


  70:                  CALL LIMPIAR


  71:  SALTA:          JMP OPCIONES


  72:   


  73:  OPCION3:        CMP SWITCHE,0


  74:                  JE SALTA


  75:                  CALL LIMPIAR


  76:                  CALL PROMEDIAR


  77:                  CALL LIMPIAR


  78:                  JMP OPCIONES


  79:   


  80:  SALIR:          CALL MODO


  81:                  .EXIT(0)


  82:   


  83:  INTRODUCIR PROC NEAR


  84:                  MOV CONTADOR,0


  85:                  MOV DH,10


  86:                  MOV DL,0


  87:                  CALL CURSOR


  88:                  LEA DX,LINEA1


  89:                  MOV AH,9


  90:                  INT 21H


  91:                  MOV DH,12


  92:                  MOV DL,0


  93:                  CALL CURSOR


  94:                  LEA SI,TABLA


  95:   


  96:   


  97:   


  98:  ; revisar q ahora son 10


  99:                  MOV CX,10


 100:  LAZO1:          MOV AH,0


 101:                  INT 16H


 102:                  CMP AL,13


 103:                  JE SALIR1


 104:                  CMP AL,30H


 105:                  JC LAZO1


 106:                  CMP AL,3AH


 107:                  JNC LAZO1


 108:                  MOV [SI],AL


 109:                  INC SI


 110:                  MOV DL,AL


 111:                  MOV AH,2


 112:                  INT 21H


 113:  LAZO2:          MOV AH,0


 114:                  INT 16H


 115:                  CMP AL,30H


 116:                  JC LAZO2


 117:                  CMP AL,47H


 118:                  JNC LAZO2


 119:                  MOV [SI],AL


 120:                  INC SI


 121:                  MOV DL,AL


 122:                  MOV AH,2


 123:                  INT 21H


 124:                  INC CONTADOR


 125:                  MOV DL,20H


 126:                  MOV AH,2


 127:                  INT 21H


 128:                  LOOP LAZO1


 129:  SALIR1:         RETN


 130:  INTRODUCIR ENDP


 131:   


 132:  ASC2HEX PROC NEAR


 133:                  LEA DI,TABLAHEX


 134:                  LEA SI,TABLA


 135:                  MOV CX,CONTADOR


 136:  LAZO3:          MOV BH,[SI]


 137:                  MOV BL,[SI+1]


 138:                  CMP BH,3AH


 139:                  JB NUMERO1


 140:                  SUB BH,7


 141:  NUMERO1:        SUB BH,30H


 142:                  ROL BH,4


 143:                  CMP BL,3AH


 144:                  JB NUMERO2


 145:                  SUB BL,7


 146:  NUMERO2:        SUB BL,30H


 147:                  OR BH,BL


 148:                  MOV [DI],BH


 149:                  INC DI


 150:                  ADD SI,2


 151:                  LOOP LAZO3


 152:                  RETN


 153:  ASC2HEX ENDP


 154:   


 155:  BURBUJA PROC NEAR


 156:                  MOV CX,CONTADOR


 157:                  DEC CX


 158:  SALTO3:         LEA SI,TABLAHEX


 159:                  MOV BL,0


 160:  SALTO2:         MOV AL,[SI]


 161:                  CMP AL,[SI+1]


 162:                  JC SALTO1


 163:                  MOV BH,[SI+1]


 164:                  MOV [SI],BH


 165:                  MOV [SI+1],AL


 166:  SALTO1:         INC SI


 167:                  INC BL


 168:                  CMP BL,CL


 169:                  JNE SALTO2


 170:                  LOOP SALTO3


 171:                  RETN


 172:  BURBUJA ENDP


 173:   


 174:  ORDENAR PROC NEAR


 175:   


 176:                  MOV DH,13


 177:                  MOV DL,0


 178:                  CALL CURSOR


 179:                  CALL BURBUJA


 180:                  MOV CX,CONTADOR


 181:                  LEA DI,TABLAORD


 182:                  LEA SI,TABLAHEX


 183:  LAZO5:          MOV AL,[SI]


 184:                  CALL HEX2ASC


 185:                  MOV BYTE PTR [DI],BH


 186:                  MOV BYTE PTR [DI+1],BL


 187:                  MOV BYTE PTR [DI+3],20H


 188:                  ADD DI,3


 189:                  INC SI


 190:                  LOOP LAZO5


 191:                  LEA SI,TABLAORD


 192:                  MOV CX,CONTADOR


 193:  LAZO7:          MOV DL,[SI]


 194:                  MOV AH,2


 195:                  INT 21H


 196:                  INC SI


 197:                  MOV DL,[SI]


 198:                  MOV AH,2


 199:                  INT 21H


 200:                  INC SI


 201:                  MOV DL,[SI]


 202:                  MOV AH,2


 203:                  INT 21H


 204:                  INC SI


 205:  LAZO6:          MOV AH,0


 206:                  INT 16H


 207:                  CMP AL,13


 208:                  JE SIGUIENTE


 209:                  CMP AL,20H


 210:                  JE TODO


 211:                  JMP LAZO6


 212:  SIGUIENTE:      LOOP LAZO7


 213:                  MOV AH,0


 214:                  INT 16H


 215:                  RET


 216:  TODO:           MOV DH,13


 217:                  MOV DL,0


 218:                  CALL CURSOR


 219:                  LEA DX,TABLAORD


 220:                  MOV AH,9


 221:                  INT 21H


 222:                  MOV AH,0


 223:                  INT 16H


 224:                  RET


 225:  ORDENAR ENDP


 226:   


 227:  HEX2ASC PROC NEAR


 228:                  MOV BH,AL


 229:                  MOV BL,AL


 230:                  ROL BH,4


 231:                  AND BH,0FH


 232:                  CMP BH,0AH


 233:                  JC NUMERO3


 234:                  ADD BH,7


 235:  NUMERO3:        ADD BH,30H


 236:                  AND BL,0FH


 237:                  CMP BL,0AH


 238:                  CMP BL,0AH


 239:                  JC NUMERO4


 240:                  ADD BL,7


 241:  NUMERO4:        ADD BL,30H


 242:                  RETN


 243:  HEX2ASC ENDP


 244:   


 245:  PROMEDIAR PROC NEAR


 246:                  CALL NUMERO


 247:                  LEA SI,TABLAHEX2


 248:                  MOV CX,CONTADOR


 249:                  MOV AX,0


 250:                  MOV BX,0


 251:  LAZO4:          MOV BL,[SI]


 252:                  ADD AX,BX


 253:                  INC SI


 254:                  LOOP LAZO4


 255:                  MOV DX,CONTADOR


 256:                  DIV DL


 257:                  CALL NUMEROS


 258:                  CALL HEX2ASC


 259:                  MOV [PROMEDIO],BH


 260:                  MOV [PROMEDIO+1],BL


 261:                  MOV DH,13


 262:                  MOV DL,0


 263:                  CALL CURSOR


 264:                  LEA DX,PANTALLA3


 265:                  MOV AH,9


 266:                  INT 21H


 267:                  MOV AH,0


 268:                  INT 16H


 269:                  RETN


 270:  PROMEDIAR ENDP


 271:   


 272:  MODO PROC NEAR


 273:                  MOV AH,0


 274:                  MOV AL,3


 275:                  INT 10H


 276:                  RETN


 277:  MODO ENDP


 278:   


 279:  SCREEN PROC NEAR


 280:                  MOV AH,6


 281:                  MOV BH,17H


 282:                  MOV DX,184FH


 283:                  INT 10H


 284:                  RETN


 285:  SCREEN ENDP


 286:   


 287:  CURSOR PROC NEAR


 288:                  MOV AH,2


 289:                  MOV BH,0


 290:                  INT 10H


 291:                  RETN


 292:  CURSOR ENDP


 293:   


 294:  LIMPIAR PROC NEAR


 295:                  MOV AL,15


 296:                  MOV CH,7


 297:                  MOV CL,0


 298:                  CALL SCREEN


 299:                  RETN


 300:  LIMPIAR ENDP


 301:   


 302:   


 303:  NUMERO PROC NEAR


 304:                  PUSH DX


 305:                  PUSH BX


 306:                  LEA SI,TABLAHEX


 307:                  LEA DI,TABLAHEX2


 308:                  MOV CX,CONTADOR


 309:  num1:           mov al,[si]


 310:                  and al,0fh


 311:                  mov dl,al


 312:                  mov al,[si]


 313:                  and al,0f0h


 314:                  rol al,4


 315:                  mov dh,al


 316:                  mov bh,0


 317:  num22:          dec dl


 318:                  jnz num2


 319:                  inc bh


 320:                  mov dl,9


 321:                  dec dh


 322:                  cmp dh,0ffh


 323:                  je num23


 324:  num2:           inc bh


 325:                  jmp num22


 326:  num23:          mov byte ptr [DI],bh


 327:                  inc di


 328:                  inc si


 329:                  loop num1


 330:   


 331:                  POP BX


 332:                  POP DX


 333:                  RETN


 334:  NUMERO ENDP


 335:   


 336:  NUMEROS PROC NEAR


 337:                  MOV CH,0


 338:                  MOV CL,AL


 339:                  MOV AX,0


 340:  NUME:           INC AL


 341:                  DAA


 342:                  LOOP NUME


 343:                  RETN


 344:   


 345:   


 346:  NUMEROS ENDP


 347:                  


 348:   


 349:   


 350:   


 351:                  END


Digitales III – Prof. Bethancourt – 1ª Evaluacion

Este codigo es la primera evaluacion que acostumbraba a hacer este profesor, ya esta configurado para pasarle parametros a la aplicacion usando el segmento de PSP

   1:                  .MODEL SMALL


   2:                  .STACK 256


   3:                  .DATA


   4:  TABLA           DB 0,1,15,10,,46H,88H,0AFH,34H,9AH,0ADH


   5:                  DB 91H,78H,0A2H,45H,0FEH,4DH,3DH,5CH,70H,11H


   6:  BCD             DB 20 DUP (?)


   7:  HEXA            DB 20 DUP (?)


   8:  PROM            DB ?


   9:  TABLA1          DB 20 DUP (?)


  10:  SWDTA           DB ?


  11:  TABLAAUX        DB 48 DUP (255),0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,0FFH


  12:                  DB 200 DUP (255)


  13:  SIGNOS          DB ".,;:"


  14:  TABLA2          DB 20 DUP (?)


  15:                  


  16:                  .CODE


  17:                  PUSH ES


  18:                  MOV AX,@DATA


  19:                  MOV DS,AX


  20:                  POP ES                                                                                                                  


  21:                  MOV DI,80H


  22:                  MOV AL,ES:[DI]


  23:                  CMP AL,0


  24:                  JE SALIR1


  25:                  MOV AH,AL


  26:                  INC DI


  27:                  DEC AH


  28:                                                  


  29:  NEXT:           INC DI


  30:                  DEC AH


  31:                  MOV AL,ES:[DI]


  32:                  CMP AL,"-"


  33:                  JE BUSCAOP


  34:  VERIF1:         CMP AH,00H


  35:                  JE SALIR


  36:                  JMP NEXT


  37:   


  38:  BUSCAOP:        INC DI


  39:                  DEC AH


  40:                  MOV AL,ES:[DI]


  41:                  CMP AL,"b"


  42:                  JE BCD1


  43:                  CMP AL,"h"


  44:                  JE HEXA1


  45:                  CMP AL,"x"


  46:                  JE CONVER


  47:                  CMP AH,00H


  48:                  JE SALIR


  49:                  MOV SWDTA,0FFH


  50:                  CMP AL,"-"


  51:                  JE BUSCAOP


  52:                  JMP NEXT


  53:   


  54:  BCD1:           CALL UNO


  55:                  JMP NEXT


  56:  HEXA1:          CALL DOS


  57:                  JMP NEXT


  58:  CONVER:         CALL SEIS


  59:                  JMP NEXT


  60:                  


  61:  SALIR1:         CALL UNO


  62:                  CALL DOS


  63:                  CALL TRES


  64:                  CALL CUATRO


  65:                  CALL CINCO


  66:  SALIR:          .EXIT(0)


  67:   


  68:  UNO PROC NEAR


  69:                  PUSH DI


  70:                  PUSH AX


  71:                  LEA SI,TABLA


  72:                  LEA DI,BCD


  73:                  MOV CX,20


  74:  LAZO1:          MOV AL,BYTE PTR [SI]


  75:                  AND AL,0F0H


  76:                  CMP AL,0A0H


  77:                  JNC SIGUIENTE


  78:                  MOV AL,BYTE PTR [SI]


  79:                  AND AL,0FH


  80:                  CMP AL,0AH


  81:                  JNC SIGUIENTE


  82:                  MOV AL,BYTE PTR [SI]


  83:                  MOV BYTE PTR [DI],AL


  84:                  INC DI


  85:  SIGUIENTE:      INC SI


  86:                  LOOP LAZO1


  87:                  POP AX


  88:                  POP DI


  89:                  RETN


  90:  UNO ENDP


  91:   


  92:  DOS PROC NEAR


  93:                  PUSH DI


  94:                  PUSH AX


  95:                  LEA SI,TABLA


  96:                  LEA DI,HEXA


  97:                  MOV CX,40


  98:  LAZO2:          MOV AL,BYTE PTR [SI]


  99:                  AND AL,0F0H


 100:                  CMP AL,0A0H


 101:                  JC SIGUIENTE2


 102:                  MOV AL,BYTE PTR [SI]


 103:                  AND AL,0FH


 104:                  CMP AL,0AH


 105:                  JC SIGUIENTE2


 106:                  MOV AL,BYTE PTR [SI]


 107:                  MOV BYTE PTR [DI],AL


 108:                  INC DI


 109:  SIGUIENTE2:     INC SI


 110:                  LOOP LAZO2


 111:                  POP AX


 112:                  POP DI


 113:                  RETN


 114:  DOS ENDP


 115:   


 116:  TRES PROC NEAR


 117:                  LEA SI,TABLA


 118:                  MOV AX,0


 119:                  MOV CX,20


 120:                  MOV DX,0


 121:  LAZO3:          MOV AL,BYTE PTR [SI]


 122:                  CMP AL,30H


 123:                  JC SIGUIENTE3


 124:                  CMP AL,3AH


 125:                  JNC SIGUIENTE3


 126:                  AND AL,0FH


 127:                  ADD PROM,AL


 128:                  INC DL


 129:  SIGUIENTE3:     INC SI


 130:                  LOOP LAZO3


 131:                  MOV AH,0


 132:                  MOV AL,PROM


 133:                  DIV DL


 134:                  OR AL,30H


 135:                  MOV PROM,AL


 136:                  RETN


 137:  TRES ENDP


 138:   


 139:  CUATRO PROC NEAR


 140:                  PUSH ES


 141:                  PUSH DS


 142:                  POP ES


 143:                  MOV DX,4


 144:                  LEA SI,SIGNOS


 145:  XX5:            LEA DI,TABLA


 146:                  MOV CX,20


 147:  XX4:            MOV AL,[SI]


 148:                  SCASB


 149:                  JNZ XXX


 150:                  MOV BYTE PTR [DI-1],20H


 151:  XXX:            LOOP XX4


 152:                  INC SI


 153:                  DEC DX


 154:                  CMP DX,0


 155:                  JNZ XX5


 156:                  POP ES


 157:                  RETN


 158:  CUATRO ENDP


 159:   


 160:  CINCO PROC NEAR


 161:                  LEA SI,TABLA


 162:                  LEA BX,TABLAAUX


 163:                  LEA DI,TABLA1


 164:                  MOV CX,20


 165:  LAZO5:          MOV AL, BYTE PTR [SI]


 166:                  XLAT


 167:                  CMP AL,0FFH


 168:                  JE ERROR


 169:                  MOV BYTE PTR [DI],AL


 170:                  INC DI


 171:  SIGUIENTE5:     INC SI


 172:                  LOOP LAZO5


 173:                  RETN


 174:  ERROR:          MOV SWDTA,AL


 175:                  JMP SIGUIENTE5


 176:  CINCO ENDP


 177:   


 178:  SEIS PROC NEAR


 179:                  LEA SI,TABLA1


 180:                  LEA BX,TABLAAUX


 181:  SALTO61:        INC DI


 182:                  INC DI


 183:                  DEC AH


 184:                  DEC AH


 185:                  MOV DH,ES:[DI]


 186:                  INC DI


 187:                  DEC AH


 188:                  MOV DL,ES:[DI]


 189:                  INC DI


 190:                  DEC AH


 191:                  AND DH,0FH


 192:                  AND DL,0FH


 193:                  ROL DH,4


 194:                  OR DH,DL


 195:                  MOV AL,DH


 196:                  XLAT


 197:                  CMP AL,255


 198:                  JE SIGUIENTE6


 199:                  MOV BYTE PTR [SI],AL


 200:                  INC SI


 201:  SIGUIENTE6:     MOV AL,ES:[DI]


 202:                  CMP AL,","


 203:                  JNE SALTO6


 204:                  JMP SALTO61


 205:   


 206:  SALTO6:         RETN


 207:  SEIS ENDP


 208:                  END


Digitales III – Prof. Bethancourt – 4ª Evaluacion Semestre 2006-II

 

Profesor: Carlos Bethencourt
Practica # 4
Practica

Desarrolle un programa que permita simular un CHAT entre dos computadores.

El nombre (10 caracteres) de los participantes debe aparecer en colores diferentes, seguido del mensaje a enviar (Hasta 50 caracteres).

Ejemplo:

Carlos: Hola como estas?

Mariana: Yo estoy bien, y tu?

Carlos: Bien, cuando nos vemos?

 

   1:                  .model small


   2:                  .stack 64h


   3:                  .data


   4:  caracter        db ?


   5:  atributo        db ?


   6:  mensaje3        db "    Introduce el nick max 10 caracteres$"


   7:  contador        db ?


   8:  nickname        db 11 dup (?)


   9:  mensaje         db 51 dup (?)


  10:  mensaje2        db 69 dup (20h),24h


  11:  mensaje10       db 80 dup (20h)


  12:   


  13:  marco           db 0,0,0,201,70 dup (205),187,10,13


  14:                  db 0,0,0,186,70 dup (20h),186,10,13


  15:                  db 0,0,0,186,70 dup (20h),186,10,13


  16:                  db 0,0,0,186,70 dup (20h),186,10,13


  17:                  db 0,0,0,186,70 dup (20h),186,10,13


  18:                  db 0,0,0,186,70 dup (20h),186,10,13


  19:                  db 0,0,0,186,70 dup (20h),186,10,13


  20:                  db 0,0,0,186,70 dup (20h),186,10,13


  21:                  db 0,0,0,186,70 dup (20h),186,10,13


  22:                  db 0,0,0,186,70 dup (20h),186,10,13


  23:                  db 0,0,0,186,70 dup (20h),186,10,13


  24:                  db 0,0,0,186,70 dup (20h),186,10,13


  25:                  db 0,0,0,186,70 dup (20h),186,10,13


  26:                  db 0,0,0,186,70 dup (20h),186,10,13


  27:                  db 0,0,0,186,70 dup (20h),186,10,13


  28:                  db 0,0,0,186,70 dup (20h),186,10,13


  29:                  db 0,0,0,186,70 dup (20h),186,10,13


  30:                  db 0,0,0,200,70 dup (205),188,24h


  31:   


  32:  marco2          db 0,0,0,201,10 dup (205), " ESCRIBE EL MENSAJE ",40 dup (205),187,10,13


  33:                  db 0,0,0,186,70 dup (20h),186,10,13


  34:                  db 0,0,0,200,70 dup (205),188,24h


  35:   


  36:  marco3          db 0,0,0,201,10 dup (205), " ESCRIBE EL NICK, MAX 10 CARACTERES ",24 dup (205),187,10,13


  37:                  db 0,0,0,186,70 dup (20h),186,10,13


  38:                  db 0,0,0,200,70 dup (205),188,24h


  39:   


  40:   


  41:   


  42:                  .code


  43:   


  44:                  mov ax,@data


  45:                  mov es,ax


  46:                  mov ds,ax


  47:   


  48:                  call cls


  49:   


  50:                  mov dh,15


  51:                  mov dl,0


  52:                  call cursor


  53:   


  54:                  lea dx,marco3


  55:                  mov ah,9


  56:                  int 21h


  57:   


  58:                  mov dh,16


  59:                  mov dl,10


  60:                  call cursor


  61:                  


  62:                  lea si,nickname


  63:                  mov cx,10


  64:  pidonick:       mov ah,0


  65:                  int 16h


  66:                  cmp al,13


  67:                  je salnick


  68:                  mov [si],al


  69:                  inc si


  70:                  mov byte ptr [si],">"


  71:                  mov dl,al


  72:                  mov ah,2


  73:                  int 21h


  74:                  loop pidonick


  75:  salnick:        call cls


  76:                  mov dh,4


  77:                  mov dl,0


  78:                  call cursor


  79:                  lea dx,marco


  80:                  mov ah,9


  81:                  int 21h


  82:   


  83:                  mov dh,22


  84:                  mov dl,0


  85:                  call cursor


  86:                  mov ah,9


  87:                  lea dx,marco2


  88:                  int 21h


  89:                  


  90:   


  91:   


  92:  inicio:         mov contador,0


  93:                  lea si,mensaje


  94:                  mov cx,50


  95:                  call limpiar


  96:                  lea si,mensaje


  97:                  mov dh,23


  98:                  mov dl,5


  99:                  call cursor


 100:                  mov ah,9


 101:                  lea dx,mensaje2


 102:                  int 21h


 103:                  mov dh,23


 104:                  mov dl,5


 105:                  call cursor


 106:   


 107:  tecla:


 108:                  mov ah,0bh


 109:                  int 21h


 110:                  cmp al,0


 111:                  je nada


 112:                  mov ah,1


 113:                  int 21h


 114:   


 115:                  cmp al,1bh


 116:                  je salir


 117:                  cmp al,13


 118:                  je enviar


 119:                  mov [si],al


 120:                  inc si


 121:                  inc contador


 122:  nada:           call recibe


 123:                  jmp tecla


 124:  salir:          call modot


 125:                  .exit


 126:   


 127:  enviar:


 128:                  call leerpantalla


 129:                  mov dh,20


 130:                  mov dl,5


 131:                  call cursor


 132:                  mov ah,9


 133:                  lea dx,mensaje2


 134:                  int 21h


 135:   


 136:                  mov dh,20


 137:                  mov dl,5


 138:                  mov al,00000001b


 139:                  mov ah,13h


 140:                  mov bh,0


 141:                  mov bl,72h


 142:                  mov ch,0


 143:                  mov cl,contador


 144:                  add cl,11


 145:                  lea bp,nickname


 146:                  int 10h


 147:                  call transmite


 148:                  jmp inicio


 149:   


 150:  modot:          mov ah,0


 151:                  mov al,3


 152:                  int 10h


 153:                  ret


 154:   


 155:  cls:            mov ah,6


 156:                  mov al,0


 157:                  mov bh,70h


 158:                  mov cx,0


 159:                  mov dh,24


 160:                  mov dl,79


 161:                  int 10h


 162:                  ret


 163:   


 164:  leerpantalla:


 165:                  call leeposicion


 166:                  push dx


 167:   


 168:                  mov dh,6


 169:  leopant2:       mov dl,5


 170:  leopant:        call cursor


 171:                  call leecursor


 172:                  mov atributo,ah


 173:                  mov caracter,al


 174:                  dec dh


 175:                  call cursor


 176:                  call escribe


 177:                  inc dh


 178:                  inc dl


 179:                  cmp dl,66


 180:                  jne leopant


 181:                  inc dh


 182:                  cmp dh,21


 183:                  jne leopant2


 184:   


 185:                  pop dx


 186:                  call cursor


 187:                  ret


 188:                  


 189:  escribe:        mov al,caracter


 190:                  mov ah,9


 191:                  mov bh,0


 192:                  mov bl,atributo


 193:                  mov cx,1


 194:                  int 10h


 195:                  ret


 196:   


 197:  leeposicion:


 198:                  mov ah,3


 199:                  mov bh,0


 200:                  int 10h


 201:                  ret


 202:   


 203:  leecursor:


 204:                  mov ah,8


 205:                  mov bh,0


 206:                  int 10h


 207:                  ret


 208:   


 209:  cursor:         mov ah,2


 210:                  mov bh,0


 211:                  int 10h


 212:                  ret


 213:   


 214:  limpiar:        mov byte ptr [si],0


 215:                  inc si


 216:                  loop limpiar


 217:                  ret


 218:                  


 219:  transmite:      nop


 220:                  mov ch,0


 221:                  mov cl,contador


 222:                  add cx,12


 223:                  lea si,contador


 224:  lazo01:         call estado


 225:                  test ah,40h


 226:                  jz lazo01


 227:                  call escricom


 228:                  inc si


 229:                  loop lazo01


 230:                  ret


 231:   


 232:  lazo10:         pop si


 233:                  ret


 234:   


 235:  recibe:         nop


 236:                  push si


 237:                  lea si,mensaje10


 238:                  call estado


 239:                  test ah,1


 240:                  jz lazo10


 241:                  call LEERCOM


 242:                  MOV [SI],AL


 243:                  INC SI


 244:   


 245:                  xor cx,cx


 246:                  mov cl,[si-1]


 247:  lazo11:         call estado


 248:                  test ah,1


 249:                  jz lazo11


 250:                  call LEERCOM


 251:                  MOV [SI],AL


 252:                  INC SI


 253:                  loop lazo11


 254:   


 255:                  call leeposicion


 256:                  push dx


 257:   


 258:                  call leerpantalla


 259:                  mov dh,20


 260:                  mov dl,5


 261:                  call cursor


 262:                  mov ah,9


 263:                  lea dx,mensaje2


 264:                  int 21h


 265:                  push si


 266:                  lea si,mensaje10


 267:                  mov cl,[si]


 268:                  inc si


 269:                  push si


 270:                  pop bp


 271:   


 272:                  mov dh,20


 273:                  mov dl,5


 274:                  mov al,00000001b


 275:                  mov ah,13h


 276:                  mov bh,0


 277:                  mov bl,76h


 278:                  mov ch,0


 279:                  int 10h


 280:                  pop si


 281:   


 282:                  pop dx


 283:                  call cursor


 284:                  pop si


 285:                  ret


 286:   


 287:  preparar:       mov ah,0


 288:                  mov al,11100011b


 289:                  mov dx,0


 290:                  int 14h


 291:                  ret


 292:  estado:         mov ah,3


 293:                  mov dx,0


 294:                  int 14h


 295:                  ret


 296:  leercom:        mov ah,2


 297:                  mov dx,0    ; cambiar a 0


 298:                  int 14h


 299:                  ret


 300:  escricom:       mov ah,1


 301:                  mov al,[si]


 302:                  mov dx,0


 303:                  int 14h


 304:                  ret


 305:   


 306:                  end