Programación General > ASM (Ensamblador)
- Flechas De Direccion-
cybergatita:
Este..... :unsure: no, entendi :(
cybergatita:
lo eh implementado , lo dejo attachemnt, pero tal vez cometi errores ya que no me hace practicamente nada al correr el ejecutable
y gracias por tu ayuda tania_d
Toph:
:o pues si hay muchos errores, no lo puedo probar porque mi MASM es antiguo y las estructuras del programa son diferentes asi que no se si habra un error de estructura, pero hay varios errores en el programa, creo que no me entendiste :P todo lo que yo puse a la par de JZ era un salto a una etiqueta y no a una rutina proc near :unsure:, por lo que hay mucho que corregir
los errores comienzan aqui:
--- Código: Text ---cmp al,50h;comparo si es flecha abajoCALL ABAJOjz ABAJO;si es se va a la rutina "abajo"cmp al,48h;si no es verifica si es flecha arribaCALL 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 aqui hay error, porque hace la comparacion de la tecla pero no importa si es o no es siempre va a llamar a la rutina ABAJO porque hay un call
ahora aqui, en la rutina abajo:
--- Código: Text ---mov bh,00; leer donde esta el cursor mov ah,03h;en dh queda la fila int 10h call sombras cmp dh, 04; verifica si es la fila 04 (primera opcion) jz segundaop; si es asi sombrea opcion 2 cmp dh, 07;verifica si es la fila 07 (segunda opcion) jz terceraop; si es asi sombrea opcion 3
aqui despues de leer el cursor llamas a la rutina sombras donde se sobrean todas las opciones, sin importar donde este el cursor ya que llamas a esa rutina :o y hasta despues haces la comparacion
la rutina arriba la pusiste exactamente igual a la de abajo :blink: y no debe ser asi, tienes que ponerla asi:
--- Código: Text ---mov bh,00; leer donde esta el cursor mov ah,03h;en dh queda la fila int 10h cmp dh, 04; verifica si es la fila 04 (primera opcion) jz cuartaop; si es asi sombrea opcion 4 cmp dh, 07;verifica si es la fila 07 (segunda opcion) jz primeraop; si es asi sombrea opcion1 cmp dh, 0Ah;verifica si es la fila 0Ah (tercera opcion) jz segundaop; si es asi sombrea opcion 2 cmp dh,0Ch;verifica si es la fila 0Ch (cuarta opcion) jz terceraop; si es asi sombrea opcion 3
la rutina arriba y abajo las puedes dejar como proc near, pero la rutina sombras es mejor quitarla porque asi como esta al llamarla se sombrean todas las opciones siempre es mejor poner cada opcion de sombreado aparte como proc near.
si haces esto se debe corregir lo de JZ que debe apuntar a una etiqueta y en esa etiqueta poner la instruccion call.
cybergatita:
Pues, hice lo que me dijiste tania_D (!!!espero!!!)
Te dejo un adjunto.
gracias
Toph:
:unsure: aun hay errores, veamos aqui:
--- Código: Text ---MOV bh,00MOV ah,03hint 10hMOV AH,1INT 21Hcmp al,50h jz down cmp al,48h jz up down: call aba up: call arri aqui no se porque lees la posicion del cursor al inicio si debe ser solo la tecla, pero no importa el problema aca es que si son las flechas todo bien pero si es otra tecla, asi como lo has dejado revisa si es 50 no, sigue revisa si es 48 no y como no es ninguna sigue y llega a call aba o sea sale lo mismo si es flecha hacia abajo que si es otra tecla. para corregir esto debes poner un JMP etiqueta de tal manera que si no era ninguna de las dos teclas salte otravez a leer la tecla, otro problema de esta rutina es que por ejemplo se presiono tecla hacia abajo bien llega a call aba y hace lo que tiene la rutina aba al llegar al ret de la rutina el programa regresa a la sentencia que esta justo despues del call aba o sea a call arri ahi hay un gran error :o
para corregir esta parte igual con jmp ejemplo:
--- Código: Text --- etiqueta:MOV bh,00MOV ah,03hint 10hMOV AH,1INT 21Hcmp al,50h jz down cmp al,48h jz up jmp etiqueta; si no era ni flecha arriba ni abajo regrese a leer tecla otra vez down: call abajmp etiqueta; regresa a esperar nueva orden despues de haber hecho la anterior up: call arrijmp etiqueta; regresa a esperar nueva orden despues de haber hecho la anterior
:huh: aqui en esta parte:
--- Código: Text ---unoerop: call primeraop dosdaop: call segundaop terraop: call terceraop cuarop: call cuartaop el mismo problema si llamas a call primeraop al finalizar esa rutina el programa regresa a la sentencia que esta debajo de call primeraop o sea a segundaop y asi hasta el final y como esto esta afuera de las rutinas seria hasta donde esta el fin del programa, seria mejor que metieras esto en las rutinas arriba y abajo porque tengo mis dudas :unsure: sobre si es posible que con un jz se pueda saltar a una etiqueta que no este dentro de la rutina proc near, lo mejor seria dejarlo asi (tanto en arri como en aba):
--- Código: Text --- ARRI Proc nearmov bh,00 mov ah,03h int 10h cmp dh,04 jz cuarop cmp dh, 07 jz unoerop cmp dh, 0Ah jz dosdaop cmp dh,0Dh jz terraop unoerop: call primeraop jmp terminar;salto necesario para que no se ejecuten las opciones de abajo dosdaop: call segundaop jmp terminar;salto necesario para que no se ejecuten las opciones de abajo terraop: call terceraop jmp terminar;salto necesario para que no se ejecuten las opciones de abajocuarop: call cuartaopterminar:retEndp ARRI
saludos :hola: y espero me entiendas
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa