Captar tecla
Me gustaria que alguien me ayudase con el tema de captar una tecla. Normalmente se utiliza
Mov ah,1
int 21h
Me gustaria saber si existe otro modo, para que al pulsar la tecla no aparezca en pantalla,es decir, que tome el valor de la tecla pulsada pero que no lo visualice en pantalla.
Muchisimas gracias!!!
Mov ah,1
int 21h
Me gustaria saber si existe otro modo, para que al pulsar la tecla no aparezca en pantalla,es decir, que tome el valor de la tecla pulsada pero que no lo visualice en pantalla.
Muchisimas gracias!!!
hola amigo es facil
getch() te capta las teclas sin mostrarla ej:
op=getch();//ahi guardas la tecla que capto para despues si quieres póder verla enseñando la variable
getch() te capta las teclas sin mostrarla ej:
op=getch();//ahi guardas la tecla que capto para despues si quieres póder verla enseñando la variable
hola amigo es facil
getch() te capta las teclas sin mostrarla ej:
op=getch();//ahi guardas la tecla que capto para despues si quieres póder verla enseñando la variable,esa variable te puede ayudar para q puedas mover las flechas direccionales o cuando quieres salir de un programa y dice precione cualquier teccla para salir haces un getch() y validas para q salga
getch() te capta las teclas sin mostrarla ej:
op=getch();//ahi guardas la tecla que capto para despues si quieres póder verla enseñando la variable,esa variable te puede ayudar para q puedas mover las flechas direccionales o cuando quieres salir de un programa y dice precione cualquier teccla para salir haces un getch() y validas para q salga
Puedes usa los servicios '7' y '8' tambien de la Int 21h
Ambas se parecen y te permiten capturar la tecla sin eco (No se muestra en Pantalla) , yo lo uso cuando pongo menus, y no quiero que aparesca la tecla que pulso, sino que directamente entre a la Opcion.
en ambos casos, te devuelve en AL, el codigo Ascii
de la tecla que pulsas
Su sintaxis es igual que para el servicio '1'
Mov ah,7; u 8
int 21h
Otra es usarel servicio 0 de la Int 16h
aqui , te devuelve:
AH=Scan Code del Teclado
AL=Codigo Ascii
Su sintaxis :
MOv ah,0
Int 16H
Ambas se parecen y te permiten capturar la tecla sin eco (No se muestra en Pantalla) , yo lo uso cuando pongo menus, y no quiero que aparesca la tecla que pulso, sino que directamente entre a la Opcion.
en ambos casos, te devuelve en AL, el codigo Ascii
de la tecla que pulsas
Su sintaxis es igual que para el servicio '1'
Mov ah,7; u 8
int 21h
Otra es usarel servicio 0 de la Int 16h
aqui , te devuelve:
AH=Scan Code del Teclado
AL=Codigo Ascii
Su sintaxis :
MOv ah,0
Int 16H
te envio un programa completo que te permite apreciar que tecla presionaste en la pantalla, espero lo analisis y te sea de utilidad.
.MODEL SMALL
.DATA
ORDEN DB 'POR FAVOR PULSA UNA TECLA... $ '
DESPL DB 'PULSASTE LA TECLA: ',"$"
REG DB ?
REG1 DB ?
.CODE
;PROGRAMA PRINCIPAL
TECLEA PROC NEAR
MOV AX,@DATA ; INICIALIZACION DEL SEGMENTO
MOV DS,AX ; MOVIMIENTO DE REGISTRO
CALL LIMPIA ; LIMPIAR PANTALLA
CALL POSIC
MOV DX,OFFSET ORDEN
MOV AH,09H
INT 21H
CALL LEE
CALL POSIC1
MOV DX, OFFSET DESPL
MOV AH,09H
INT 21H
CALL ESCRIBE
MOV AH,4CH
INT 21H
TECLEA ENDP
LEE PROC NEAR
MOV AH,10H
INT 16H
CMP AH,3BH
JE UNO
JMP FALSO1
UNO: JMP CAMB1
FALSO1:
CMP AH,3CH
JE DOS
JMP FALSO2
DOS: JMP CAMB2
FALSO2:
CMP AH,3DH
JE TRES
JMP FALSO3
TRES: JMP CAMB3
FALSO3:
CMP AH,3EH
JE CUATRO
JMP FALSO4
CUATRO: JMP CAMB4
FALSO4:
CMP AH,3FH
JE CINCO
JMP FALSO5
CINCO: JMP CAMB5
FALSO5:
CMP AH,40H
JE SEIS
JMP FALSO6
SEIS: JMP CAMB6
FALSO6:
CMP AH,41H
JE SIETE
JMP FALSO7
SIETE: JMP CAMB7
FALSO7:
CMP AH,42H
JE OCHO
JMP FALSO8
OCHO: JMP CAMB8
FALSO8:
CMP AH,43H
JE NUEVE
JMP FALSO9
NUEVE: JMP CAMB9
FALSO9:
CMP AH,44H
JE DIEZ
JMP FALS10
DIEZ: JMP CAMBA
FALS10:
CMP AH,45H
JE ONCE
JMP FALS11
ONCE: JMP CAMBB
FALS11:
CMP AH,85H
JE DOCE
JMP FALS12
DOCE: JMP CAMBC
FALS12:
CMP AH,86H
JE TRECE
JMP FALS13
TRECE: JMP CAMBD
FALS13:
CMP AH,01H
JE CATORCE
JMP FALS14
CATORCE: JMP ESCAPE
FALS14:
CMP AH,0EH
JE QUNCE
JMP FALS15
QUNCE: JMP BACKS
FALS15:
CMP AH,0FH
JE DIESEIS
JMP FALS16
DIESEIS: JMP TAB
FALS16:
CMP AH,1CH
JE DIESIET
JMP FALS17
DIESIET: JMP ENT
FALS17:
CMP AH,2FH
JE DIESOCH
JMP FALS18
DIESOCH: JMP SLASH
FALS18:
CMP AH,47H
JE DIESNUE
JMP FALS19
DIESNUE: JMP INICIO
FALS19:
CMP AH,4FH
JE VEINTE
JMP FALS20
VEINTE: JMP FIN
FALS20:
CMP AH,49H
JE VEINTUN
JMP FALS21
VEINTUN: JMP PAGEUP
FALS21:
CMP AH,51H
JE VEINDOS
JMP FALS22
VEINDOS: JMP PAGEDN
FALS22:
CMP AH,50H
JE VEINTRE
JMP FALS23
VEINTRE: JMP DOWNA
FALS23:
CMP AH,4BH
JE VEINCUA
JMP FALS24
VEINCUA: JMP LEFTA
FALS24:
CMP AH,4DH
JE VEINCIN
JMP FALS25
VEINCIN: JMP RIGHTA
FALS25:
CMP AH,48H
JE VEINSEI
JMP FALS26
VEINSEI: JMP UPA
FALS26:
CMP AH,52H
JE VEINSIE
JMP FALS27
VEINSIE: JMP INS1
FALS27:
CMP AH,53H
JE VEINOCH
JMP FALS28
VEINOCH: JMP DEL
FALS28:
CMP AH,1DH
JE VEINOCH
JMP FALS29
VEINNUE: JMP CTRL
FALS29:
JMP SINCAM
CAMB1: MOV AL,31H
JMP CAMBF
CAMB2: MOV AL,32H
JMP CAMBF
CAMB3: MOV AL,33H
JMP CAMBF
CAMB4: MOV AL,34H
JMP CAMBF
CAMB5: MOV AL,35H
JMP CAMBF
CAMB6: MOV AL,36H
JMP CAMBF
CAMB7: MOV AL,37H
JMP CAMBF
CAMB8: MOV AL,38H
JMP CAMBF
CAMB9: MOV AL,39H
JMP CAMBF
CAMBA: MOV AL,41H
JMP CAMBF
CAMBB: MOV AL,42H
JMP CAMBF
CAMBC: MOV AL,43H
JMP CAMBF
CAMBD: MOV AL,44H
JMP CAMBF
ESCAPE: MOV AL,53H
JMP CAMBES
BACKS: MOV AL,41H
JMP CAMBBA
TAB: MOV AL,54H
JMP CAMBTA
ENT: MOV AL,4EH
JMP CAMBEN
SLASH: MOV AL,4CH
JMP CAMBSL
INICIO: MOV AL,4EH
JMP CAMBINC
FIN: MOV AL,49H
JMP CAMBFI
PAGEUP: MOV AL,55H
JMP CAMBPU
PAGEDN: MOV AL,44H
JMP CAMBPD
DOWNA: MOV AL,41H
JMP CAMBDA
LEFTA: MOV AL,41H
JMP CAMBLA
RIGHTA: MOV AL,41H
JMP CAMBRA
UPA: MOV AL,41H
JMP CAMBUA
INS1: MOV AL,4EH
JMP CAMBINS
DEL: MOV AL,45H
JMP CAMBDEL
CTRL: MOV AL,54H
JMP CAMBCTRL
CAMBES: MOV REG1,45H
MOV REG,AL
JMP FINP
CAMBBA: MOV REG1,41H
MOV REG,AL
JMP FINP
CAMBTA: MOV REG1,54H
MOV REG,AL
JMP FINP
CAMBEN: MOV REG1,45H
MOV REG,AL
JMP FINP
CAMBSL: MOV REG1,53H
MOV REG,AL
JMP FINP
CAMBINC: MOV REG1,49H
MOV REG,AL
JMP FINP
CAMBFI: MOV REG1,46H
MOV REG,AL
JMP FINP
CAMBPU: MOV REG1,50H
MOV REG,AL
JMP FINP
CAMBPD: MOV REG1,50H
MOV REG,AL
JMP FINP
CAMBDA: MOV REG1,44H
MOV REG,AL
JMP FINP
CAMBLA: MOV REG1,4CH
MOV REG,AL
JMP FINP
CAMBRA: MOV REG1,52H
MOV REG,AL
JMP FINP
CAMBUA: MOV REG1,55H
MOV REG,AL
JMP FINP
CAMBINS: MOV REG1,49H
MOV REG,AL
JMP FINP
CAMBDEL: MOV REG1,44H
MOV REG,AL
JMP FINP
CAMBCTRL: MOV REG1,43H
MOV REG,AL
JMP FINP
SINCAM: MOV REG1,20H
MOV REG,AL
JMP FINP
CAMBF PROC NEAR
MOV REG1,46H
MOV REG,AL
JMP FINP
CAMBF ENDP
FINP: RET
LEE ENDP
ESCRIBE PROC NEAR
MOV AH,0AH
MOV AL,REG1
MOV CX,1
INT 10H
CALL POSIC2
MOV AH,0AH
MOV AL,REG
MOV CX,1
INT 10H
RET
ESCRIBE ENDP
LIMPIA PROC NEAR
MOV AX,0600H
MOV BX,1A00H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
LIMPIA ENDP
POSIC PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,0606H
INT 10H
RET
POSIC ENDP
POSIC1 PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,0907H
INT 10H
RET
POSIC1 ENDP
POSIC2 PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,091CH
INT 10H
RET
POSIC2 ENDP
.STACK
END TECLEA
.MODEL SMALL
.DATA
ORDEN DB 'POR FAVOR PULSA UNA TECLA... $ '
DESPL DB 'PULSASTE LA TECLA: ',"$"
REG DB ?
REG1 DB ?
.CODE
;PROGRAMA PRINCIPAL
TECLEA PROC NEAR
MOV AX,@DATA ; INICIALIZACION DEL SEGMENTO
MOV DS,AX ; MOVIMIENTO DE REGISTRO
CALL LIMPIA ; LIMPIAR PANTALLA
CALL POSIC
MOV DX,OFFSET ORDEN
MOV AH,09H
INT 21H
CALL LEE
CALL POSIC1
MOV DX, OFFSET DESPL
MOV AH,09H
INT 21H
CALL ESCRIBE
MOV AH,4CH
INT 21H
TECLEA ENDP
LEE PROC NEAR
MOV AH,10H
INT 16H
CMP AH,3BH
JE UNO
JMP FALSO1
UNO: JMP CAMB1
FALSO1:
CMP AH,3CH
JE DOS
JMP FALSO2
DOS: JMP CAMB2
FALSO2:
CMP AH,3DH
JE TRES
JMP FALSO3
TRES: JMP CAMB3
FALSO3:
CMP AH,3EH
JE CUATRO
JMP FALSO4
CUATRO: JMP CAMB4
FALSO4:
CMP AH,3FH
JE CINCO
JMP FALSO5
CINCO: JMP CAMB5
FALSO5:
CMP AH,40H
JE SEIS
JMP FALSO6
SEIS: JMP CAMB6
FALSO6:
CMP AH,41H
JE SIETE
JMP FALSO7
SIETE: JMP CAMB7
FALSO7:
CMP AH,42H
JE OCHO
JMP FALSO8
OCHO: JMP CAMB8
FALSO8:
CMP AH,43H
JE NUEVE
JMP FALSO9
NUEVE: JMP CAMB9
FALSO9:
CMP AH,44H
JE DIEZ
JMP FALS10
DIEZ: JMP CAMBA
FALS10:
CMP AH,45H
JE ONCE
JMP FALS11
ONCE: JMP CAMBB
FALS11:
CMP AH,85H
JE DOCE
JMP FALS12
DOCE: JMP CAMBC
FALS12:
CMP AH,86H
JE TRECE
JMP FALS13
TRECE: JMP CAMBD
FALS13:
CMP AH,01H
JE CATORCE
JMP FALS14
CATORCE: JMP ESCAPE
FALS14:
CMP AH,0EH
JE QUNCE
JMP FALS15
QUNCE: JMP BACKS
FALS15:
CMP AH,0FH
JE DIESEIS
JMP FALS16
DIESEIS: JMP TAB
FALS16:
CMP AH,1CH
JE DIESIET
JMP FALS17
DIESIET: JMP ENT
FALS17:
CMP AH,2FH
JE DIESOCH
JMP FALS18
DIESOCH: JMP SLASH
FALS18:
CMP AH,47H
JE DIESNUE
JMP FALS19
DIESNUE: JMP INICIO
FALS19:
CMP AH,4FH
JE VEINTE
JMP FALS20
VEINTE: JMP FIN
FALS20:
CMP AH,49H
JE VEINTUN
JMP FALS21
VEINTUN: JMP PAGEUP
FALS21:
CMP AH,51H
JE VEINDOS
JMP FALS22
VEINDOS: JMP PAGEDN
FALS22:
CMP AH,50H
JE VEINTRE
JMP FALS23
VEINTRE: JMP DOWNA
FALS23:
CMP AH,4BH
JE VEINCUA
JMP FALS24
VEINCUA: JMP LEFTA
FALS24:
CMP AH,4DH
JE VEINCIN
JMP FALS25
VEINCIN: JMP RIGHTA
FALS25:
CMP AH,48H
JE VEINSEI
JMP FALS26
VEINSEI: JMP UPA
FALS26:
CMP AH,52H
JE VEINSIE
JMP FALS27
VEINSIE: JMP INS1
FALS27:
CMP AH,53H
JE VEINOCH
JMP FALS28
VEINOCH: JMP DEL
FALS28:
CMP AH,1DH
JE VEINOCH
JMP FALS29
VEINNUE: JMP CTRL
FALS29:
JMP SINCAM
CAMB1: MOV AL,31H
JMP CAMBF
CAMB2: MOV AL,32H
JMP CAMBF
CAMB3: MOV AL,33H
JMP CAMBF
CAMB4: MOV AL,34H
JMP CAMBF
CAMB5: MOV AL,35H
JMP CAMBF
CAMB6: MOV AL,36H
JMP CAMBF
CAMB7: MOV AL,37H
JMP CAMBF
CAMB8: MOV AL,38H
JMP CAMBF
CAMB9: MOV AL,39H
JMP CAMBF
CAMBA: MOV AL,41H
JMP CAMBF
CAMBB: MOV AL,42H
JMP CAMBF
CAMBC: MOV AL,43H
JMP CAMBF
CAMBD: MOV AL,44H
JMP CAMBF
ESCAPE: MOV AL,53H
JMP CAMBES
BACKS: MOV AL,41H
JMP CAMBBA
TAB: MOV AL,54H
JMP CAMBTA
ENT: MOV AL,4EH
JMP CAMBEN
SLASH: MOV AL,4CH
JMP CAMBSL
INICIO: MOV AL,4EH
JMP CAMBINC
FIN: MOV AL,49H
JMP CAMBFI
PAGEUP: MOV AL,55H
JMP CAMBPU
PAGEDN: MOV AL,44H
JMP CAMBPD
DOWNA: MOV AL,41H
JMP CAMBDA
LEFTA: MOV AL,41H
JMP CAMBLA
RIGHTA: MOV AL,41H
JMP CAMBRA
UPA: MOV AL,41H
JMP CAMBUA
INS1: MOV AL,4EH
JMP CAMBINS
DEL: MOV AL,45H
JMP CAMBDEL
CTRL: MOV AL,54H
JMP CAMBCTRL
CAMBES: MOV REG1,45H
MOV REG,AL
JMP FINP
CAMBBA: MOV REG1,41H
MOV REG,AL
JMP FINP
CAMBTA: MOV REG1,54H
MOV REG,AL
JMP FINP
CAMBEN: MOV REG1,45H
MOV REG,AL
JMP FINP
CAMBSL: MOV REG1,53H
MOV REG,AL
JMP FINP
CAMBINC: MOV REG1,49H
MOV REG,AL
JMP FINP
CAMBFI: MOV REG1,46H
MOV REG,AL
JMP FINP
CAMBPU: MOV REG1,50H
MOV REG,AL
JMP FINP
CAMBPD: MOV REG1,50H
MOV REG,AL
JMP FINP
CAMBDA: MOV REG1,44H
MOV REG,AL
JMP FINP
CAMBLA: MOV REG1,4CH
MOV REG,AL
JMP FINP
CAMBRA: MOV REG1,52H
MOV REG,AL
JMP FINP
CAMBUA: MOV REG1,55H
MOV REG,AL
JMP FINP
CAMBINS: MOV REG1,49H
MOV REG,AL
JMP FINP
CAMBDEL: MOV REG1,44H
MOV REG,AL
JMP FINP
CAMBCTRL: MOV REG1,43H
MOV REG,AL
JMP FINP
SINCAM: MOV REG1,20H
MOV REG,AL
JMP FINP
CAMBF PROC NEAR
MOV REG1,46H
MOV REG,AL
JMP FINP
CAMBF ENDP
FINP: RET
LEE ENDP
ESCRIBE PROC NEAR
MOV AH,0AH
MOV AL,REG1
MOV CX,1
INT 10H
CALL POSIC2
MOV AH,0AH
MOV AL,REG
MOV CX,1
INT 10H
RET
ESCRIBE ENDP
LIMPIA PROC NEAR
MOV AX,0600H
MOV BX,1A00H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
LIMPIA ENDP
POSIC PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,0606H
INT 10H
RET
POSIC ENDP
POSIC1 PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,0907H
INT 10H
RET
POSIC1 ENDP
POSIC2 PROC NEAR
MOV AH,02H
MOV BH,00H
MOV DX,091CH
INT 10H
RET
POSIC2 ENDP
.STACK
END TECLEA
Pues hay algún servicio que no implica eco en pantalla. En la 21h no me acuerdo, pero en la 10h (la de la bios, seguro que sÃ). Documéntate si eso, que no tengo nada por aquÃ.
También puedes cazar la tecla haciendo una subrutina y cargándola en el vector de interrupciones, pero con eso obtendrÃas el código de rastreo del teclado y tendrÃas que crear una tabla para sacar su código ASCII, que supongo que es lo que necesitas.
Esto último es mucho follón y no vale la pena a menos que lo quieras para algo interactivo a tiempo real, tipo videojuego.
Si lo necesitas para cosas del tipo: "introduzca una letra" o algo asÃ.
La int 21h es maja porque te lo dan todo mascado, pero creo que no conviene acostumbrarse mucho. Personalmente, prefiero utilizar los servicios de la bios en vez de los del DOS.
Hala, que vaya bien; y suerta
Olshanski
También puedes cazar la tecla haciendo una subrutina y cargándola en el vector de interrupciones, pero con eso obtendrÃas el código de rastreo del teclado y tendrÃas que crear una tabla para sacar su código ASCII, que supongo que es lo que necesitas.
Esto último es mucho follón y no vale la pena a menos que lo quieras para algo interactivo a tiempo real, tipo videojuego.
Si lo necesitas para cosas del tipo: "introduzca una letra" o algo asÃ.
La int 21h es maja porque te lo dan todo mascado, pero creo que no conviene acostumbrarse mucho. Personalmente, prefiero utilizar los servicios de la bios en vez de los del DOS.
Hala, que vaya bien; y suerta
Olshanski
