Programación General > ASM (Ensamblador)
- Flechas De Direccion-
cybergatita:
Que tal chicos.
Con la ayuda de ustedes logre SIMULAR una seleccion, como lo muestro en la imagen adjunta. thanks tania_d
Solo que tengo dudas, necesito moverlo con las flechas de direccion , flecha arriba o flecha abajo, eh encontrado lo siguiente:
http://www.ctyme.com/intr/rb-1754.htm
dec - hx - char
17 11 DC1---> (DEVICE CONTROL 1)
18 12 DC2---> (DEVICE CONTROL 2)
19 13 DC3---> (DECIVE CONTROL 3)
20 14 DC4---> (DEVICE CONTROL 4)
Son codigos que vienen en la tabla ascii, ¿seran esas las flechas, es la funcion e interrumpcion correcta¿ para mover esa barrita rectangular,,
salu2. :P
HEAD DB 'prueba seleccion $'
DB 13,10,13,10, '$'
hi DB 'HOLA $'
DB 13,10,13,10,'$'
bye DB 'ADIOS $'
DB 13,10,13,10,'$'
back DB 'REGRESO $'
DB 13,10,13,10,'$'
.CODE
START:
pageclear ;ah es una macro borra pantalla
MOV AH,2
MOV BH,0
MOV DH,01H
MOV DL,15H
INT 10H
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET HEAD
MOV AH,9
INT 21H
MOV CX,0412h
MOV DX,0428h
MOV BH,70h
MOV AX,0600h
INT 10H
MOV DX,0412h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET hi
MOV AH,9
INT 21H
MOV DX,0712h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET bye
MOV AH,9
INT 21H
cybergatita:
Que tal comunidad, Pues encontre lo que buscaba, se los paso para los que no sabian como yo.
****Es posible identificar las teclas especiales de flechas ,las teclas de función y las otras como Inicio, Fin, Insertar, etc.***
Estas teclas se almacenan en el buffer del teclado dos caracteres, siendo el primero el CHR(0). Para identificar estas teclas no hay más que usar en las comprobaciones CHR(0)+El carácter que tengan asignado,Los más usados:
Flecha arriba......: CHR(0)+"H"
Flecha abajo.......: CHR(0)+"P"
Flecha izquierda...: CHR(0)+"K"
Flecha derecha.....: CHR(0)+"M"
Yo compare solo la letra correspondiente y al parecer si me la tomo, Me gustaria ver si me pueden ayudar.
Necesito que si la seleccion esta en la ultima opcion "REGRESO" y presiono la flecha abajo, la seleccion regrese a a la primera opcion "HOLA" de igual manera si estuviera en la primer opcion y presionara flecha arriba.
:P
HEAD DB 'prueba seleccion $'
DB 13,10,13,10, '$'
MENU1 DB 'HOLA $'
DB 13,10,13,10,'$'
MENU2 DB 'ADIOS $'
DB 13,10,13,10,'$'
MENU3 DB 'REGRESO $'
DB 13,10,13,10,'$'
.CODE
START:
cls
MOV AH,2
MOV BH,0
MOV DH,01H
MOV DL,15H
INT 10H
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET HEAD
MOV AH,9
INT 21H
MOV DX,0412h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU1
MOV AH,9
INT 21H
MOV DX,0712h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU2
MOV AH,9
INT 21H
MOV DX,0A12h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU3
MOV AH,9
INT 21H
mov ah,1
int 21h
cmp al,0H ; FLECHA, CODIGO, le agregue CERO
jnz FIN
firtsmenu ; es UNA MACRO donde tengo la el color de la barra
Toph:
--- Cita de: "cybergatita" ---Yo compare solo la letra correspondiente y al parecer si me la tomo, Me gustaria ver si me pueden ayudar.
Necesito que si la seleccion esta en la ultima opcion "REGRESO" y presiono la flecha abajo, la seleccion regrese a a la primera opcion "HOLA" de igual manera si estuviera en la primer opcion y presionara flecha arriba.
--- Fin de la cita ---
Hola :) , perdon por la tardanza :unsure: , Pues no he revisado bien tu programa, pero en los casos que mencionas es de hacer una comprobacion cada vez que se presiona una flecha y preguntarse si es flecha hacia abajo verificar que no se este en la ultima posicion de ser asi sombrear primera opcion y si es flecha hacia arriba verificar que no se esta en la primera posicion y si es asi sombrear la ultima (usando la Int 10h, ah=03 para leer posicion del cursor) :) ¿cual es la parte que se te dificulta?
saludos :hola:
cybergatita:
Gracias tania_D
La parte que no logro entender es esta:
; CON ESTO SOMBREO LA PRIMERA OPCION
; TENGO QUE HACER CADA UNA DE ESTAS RUTINAS, PARA CADA OPCION
; DEL MENU O
MOV CX,0412h
MOV DX,0428h
MOV BH,17h
MOV AX,0600h
INT 10H
MOV DX,0412h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU1
MOV AH,9
INT 21H
MOV DX,0712h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU2
MOV AH,9
INT 21H
MOV DX,0A12h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU3
MOV AH,9
INT 21H
MOV DX,0C12h
MOV BH,00
MOV AH,02
INT 10h
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET MENU4
MOV AH,9
INT 21H
/* AQUI POSIONO EL CURSOR Y LUEGO HAGO COMPARACION?*/
mov bh,00
mov ah,03h
int 10h
/* ESPERO TECLEAR ALGUNA FLECHA*/
mov ah,1
int 21h
cmp al,50h ;comparo si es flecha abajo, pero si es a donde voy??
eh aqui la duda.
cmp al,48h ;si es flecha arriba, pero si es a donde voy?
eh aqui la duda.
Saludos chica...
Toph:
despues de mostrar las opciones del menu y de sombrear inicialmente la primera opcion debes posicionar el cursor en la primera posicion, luego debes esperar a que se presione alguna tecla al presionarla verificar si es una tecla valida segun veo comparando si es 50 o 48
--- Código: Text --- cmp al,50h;comparo si es flecha abajojz abajo;si es se va a la rutina "abajo"cmp al,48h;si no es verifica si es flecha arribajz arriba ;si es se va a rutina "arriba"jmp noflecha; si la tecla no era ni flecha arriba ni flecha abajo debes irte a la rutina de esperar que se presione tecla ojo por ahora no estamos considerando el ENTER para entrar a las opciones
ahora en la rutina "abajo" tienes que ver donde esta el cursor y luego comparar asi:
--- Código: Text --- mov bh,00; leer donde esta el cursormov ah,03h;en dh queda la filaint 10hcmp dh, 04; verifica si es la fila 04 (primera opcion) jz opcion2; si es asi sombrea opcion 2cmp dh, 07;verifica si es la fila 07 (segunda opcion)jz opcion3; si es asi sombrea opcion 3cmp dh, 0Ah;verifica si es la fila 0Ah (tercera opcion)jz opcion4; si es asi sombrea opcion 4cmp dh,0Ch;verifica si es la fila 0Ch (cuarta opcion)jz opcion1; si es asi sombrea opcion 1
las rutinas opcion1,opcion2, etc esta el codigo de sombreado de la opcion respectiva
para la rutina "arriba" de manera similar
espero haberme dado a entender, saludos :hola:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa