CAPTURA

En este programa utilizaremos por primera vez el BLOQUE PARA CAPTURAR UNA CADENA DE CARACTERES, su uso es muy sencillo pero hay que dar algo de teoría.

 

Para empezar las cadenas de caracteres empleadas con este bloque son diferentes a las que normalmente usamos (como "Mensaje$") y tienen un formato propio el cual esta organizado de la siguiente manera:

 

Debido a esto no podremos imprimirla como las demás cadenas de caracteres, si no que imprimiremos cada caracter por separado.

Eso lo logramos con un BLOQUE "ESPECIAL" (Ver CONCEPTOS BASICOS) el cual explicare a continuación:

MOV SI, OFFSET Cadena_de_caracteres

ADD SI, 2

 

 

 

 

MOV CX, 00H

MOV CL, Cadena_de_caracteres(1)

 

Etiqueta_nueva:

MOV Respaldo, CX

 

MOV DH, Fila

MOV DL, Columna

ADD DL, Cadena_de_caracteres(1)

SUB DL, CL

MOV AH, 02H

INT 10H

LODSB

 

MOV AH, 0AH

MOV BH, 00H

MOV BL, 07H

MOV CX, 01H

INT 10H

 

MOV CX, Respaldo

LOOP Etiqueta_nueva

Donde:

Fila = Fila donde queremos colocar el cursor

Columna = Columna donde queremos colocar el cursor

Cadena_de_caracteres = Variable donde guardamos la cadena de caracteres.

Etiqueta_nueva = Una etiqueta que no ayas usado antes.

 

Notaran varias cosas en el codigo como el posicionar el cursor en la Columna Columna+Cadena_de_caracteres(1) - CL, esto es para colocar, esto lo hacemos para colocar en el lugra correcto, ejemplo: para imprimir PEDRO en la posicion 3,3 Columna vale 3, Cadena_de_caracteres(1) vale 5 y CL 5 (CL al inicio vale lo mismo que Cadena_de_caracteres(1) ). Todo esto para imprimir la letra P nos queda: 3 + 5 - 5 = 3, si contimuamos con el LOOP CX se decrementa y ahora vale 4, con lo cual la letra E se posiciona en: 3 + 5 - 4= 4, un espacio delante de la P.

 

Otra cosa es el empleo de la variable Respaldo, lo que pasa es que en el BLOQUE PARA IMPRIMIR UN CARACTER se modifica el valor de CX con lo cual el LOOP perderia la cuenta que lleva, para evitar eso justo despues de la etiqueta guardamos el valor de CX en respaldo y justo antes del comando LOOP movemos Respaldo a CX para no perder la cuenta.

 

Entendido esto pasemos al código:

 

.MODEL SMALL

.STACK

.DATA

PREGUNTA DB "Texto a desplegar:$"

RESPUESTA DB 18 DUP(?)

MENSAJE DB "Presione una tecla para continuar...$"

RESPALDO DW ?

 

.CODE

CAPTURA:

 

MOV AX,@DATA

MOV DS,AX

 

MOV AH,00H

MOV AL,02H

INT 10H

 

MOV DH,3

MOV DL,3

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET PREGUNTA

MOV AH,09H

INT 21H

 

MOV RESPUESTA(0),16

MOV DX,OFFSET RESPUESTA

MOV AH,0AH

INT 21H

 

MOV SI,OFFSET RESPUESTA

ADD SI,2

MOV CX,00H

MOV CL,RESPUESTA(1)

RETORNO1:

MOV RESPALDO,CX

 

MOV DH,5

MOV DL,3

ADD DL,RESPUESTA(1)

SUB DL,CL

MOV BH,00H

MOV AH,02H

INT 10H

 

LODSB

 

MOV AH,0AH

MOV BH,00H

MOV BL,07H

MOV CX,1

INT 10H

 

MOV CX,RESPALDO

LOOP RETORNO1

 

MOV DH,7

MOV DL,3

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET MENSAJE

MOV AH,09H

INT 21H

 

MOV AH,01H

INT 21H

 

MOV AX,4C00H

INT 21H

END CAPTURA

 

Haz CLICK aquí para bajar el archivo ASM