• Viernes 8 de Noviembre de 2024, 19:57

Autor Tema:  Duda programa con desplazamiento de bloque en pantalla!  (Leído 2795 veces)

Santi-Sfe

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Duda programa con desplazamiento de bloque en pantalla!
« en: Martes 10 de Febrero de 2009, 13:24 »
0
Bueno como dice el titulo, tengo que hacer un pequeño script que mueva un pixel por la pantalla por el momento en forma horizontal y que cuando el usuario aprete la tecla ESC salga del mismo. El problema lo tengo en encontrar que funcion utilizar para leer el teclado en cualquier momento, probe con funciones de la interrupcion 21h que borran el buffer pero cuando me toca elegir la funcion de entrada como argumento me doy cuenta de que no es lo que me serviria, ya que me queda esperando la tecla! Cualquier ayuda me vendra bien, saludos y gracias!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #1 en: Martes 10 de Febrero de 2009, 13:43 »
0

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Santi-Sfe

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #2 en: Martes 10 de Febrero de 2009, 14:51 »
0
Muchas gracias, ahora cuando termino un par de ejercicios que me quedan me pongo con ese. Otra consulta, estoy haciendo un programa ahora que lea cuantas E hay en modo texto 80*25. Tengo lo siguiente, queria saber si estaba bien:

mov cx,7d0
mov ax,b800
mov ds,ax
xor bx,bx
pop ax
ds:
mov ah,[bx]
cmp ah,45
jnz 114
inc dx
add bx,2
push ax
loop 10a
int 20

Y ademas preguntar como hacer correr el programa haciendo que me queden guardados los resultados en los registros, yo lo corro con "g" pero no me guarda los resultados en los registros "r". Saludos!

Santi-Sfe

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #3 en: Martes 10 de Febrero de 2009, 20:35 »
0
Otra consulta, aprovechando el post, como se hace para por ej hace un dir en pascal y llenar la pantalla de lo que lea, yo vi que uno de mis profes lo hacia pero no recuerdo que combinacion de teclas era! Lo necesito para hacer practicas de video!

Santi-Sfe

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #4 en: Martes 10 de Febrero de 2009, 20:52 »
0
Cita de: "Santi-Sfe"
Otra consulta, aprovechando el post, como se hace para por ej hace un dir en pascal y llenar la pantalla de lo que lea, yo vi que uno de mis profes lo hacia pero no recuerdo que combinacion de teclas era! Lo necesito para hacer practicas de video!

Lo solucione esto trabajando en consola apretando d xxx, donde xxx es un valor de memoria, rellenando asi la pantalla de esta forma. Como la consola trabaja en modo 80x25 no hay problemas si queres probar cosas en este modo!
« última modificación: Martes 10 de Febrero de 2009, 22:12 por Santi-Sfe »

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #5 en: Miércoles 11 de Febrero de 2009, 11:34 »
0
Cita de: "Santi-Sfe"
Muchas gracias, ahora cuando termino un par de ejercicios que me quedan me pongo con ese. Otra consulta, estoy haciendo un programa ahora que lea cuantas E hay en modo texto 80*25. Tengo lo siguiente, queria saber si estaba bien:

Bueno, esto no es un programa en realidad, sino instrucciones que ejecutas desde el depurador (debug).

Cita de: "Santi-Sfe"
mov cx,7d0
mov ax,b800
mov ds,ax
xor bx,bx
pop ax
ds:
mov ah,[bx]
cmp ah,45
jnz 114
inc dx
add bx,2
push ax
loop 10a
int 20

El registro dx tiene un valor indefinido cuando lo incrementas - es cierto que el depurador le da como valor 0, pero en un programa eso no pasa - , tenes que ponerlo a cero al principio (xor dx, dx) para que al final tenga sentido. No estas preservando bien ax, tenes que ponerlo en la pila ANTES de modificarlo y restaurarlo cuando termine el bucle.

Cita de: "Santi-Sfe"
Y ademas preguntar como hacer correr el programa haciendo que me queden guardados los resultados en los registros, yo lo corro con "g" pero no me guarda los resultados en los registros "r". Saludos!

En dx tendras el valor el numero de letras E encontradas.


Asi quedaria en un programa (fragmento):

Código: Text
  1. push ax
  2. mov cx,7d0
  3. mov ax,0b800h
  4. mov ds,ax
  5. xor bx,bx
  6. xor dx, dx
  7. bucle:
  8. mov ah,[bx]
  9. cmp ah,045h
  10. jnz segui
  11. inc dx
  12. segui:
  13. add bx,2
  14. loop bucle
  15. pop ax
  16.  
  17.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Santi-Sfe

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #6 en: Miércoles 11 de Febrero de 2009, 12:38 »
0
Si ahora que lo veo me di cuenta de mis errores, el xor dx,dx si faltaba, ahora los aperadores push y pop estan al reves pero en buena ubicacion, acordate que en ax guardaba la posicion B800 y cuango hago ds:mov ah,[bx] lo estoy modificando por eso estan bien ubicados.
Y otra cosa un programa es un conjuntos de instrucciones/receta/pasos a seguir para realizar una tarea especifica (definicion burda), si bien no sera "El Programa", es un programita jaja.
Gracias por tu atencion!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda programa con desplazamiento de bloque en pantalla!
« Respuesta #7 en: Miércoles 11 de Febrero de 2009, 13:06 »
0
Cita de: "Santi-Sfe"
Si ahora que lo veo me di cuenta de mis errores, el xor dx,dx si faltaba, ahora los aperadores push y pop estan al reves pero en buena ubicacion, acordate que en ax guardaba la posicion B800 y cuango hago ds:mov ah,[bx] lo estoy modificando por eso estan bien ubicados.

Primero te habia respondido como seguir esa logica (tal como decis push al principio del bucle y pop justo antes del loop) y que ax fuera B800 siempre que hicieras mov ah,[bx] pero despues me di cuenta de que no tiene sentido ya que no necesitas que ax tenga ningun valor en particular, para eso esta DS, vos no lees de ax:dx sino de ds:dx y por lo tanto podes hacer lo que quieras con ax (el prefixo ds es redundante ya que es el por defecto en este caso, por eso lo saque en mi codigo, sacalo y al depurar el programa vas a ver que en la instruccion mov debug sigue mostrando a la derecha DS:0000=X; tambien podes ver la diferencia con las instrucciones mov ah, ds:[bx] y mov ah,cs:[bx], la primera no usa ningun prefijo y la segunda si). Otra cosa es restaurar el valor original del segmento de datos cosa que se logra tal como te mostre.

Cita de: "Santi-Sfe"
Y otra cosa un programa es un conjuntos de instrucciones/receta/pasos a seguir para realizar una tarea especifica (definicion burda), si bien no sera "El Programa", es un programita jaja.
Gracias por tu atencion!

Me refiero a que no generas un programa ejecutable con un ensamblador.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.