Programación General > ASM (Ensamblador)

 - Flechas De Direccion-

<< < (3/5) > >>

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&#59;comparo si es flecha abajojz abajo&#59;si es se va a la rutina &#34;abajo&#34;cmp al,48h&#59;si no es verifica si es flecha arribajz arriba  &#59;si es se va a rutina &#34;arriba&#34;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&#59; 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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa