Pregunta

Acabo de comenzar a usar lenguaje ensamblador (sentí que era como aprender algo nuevo) y me he topado con algunas preguntas (hasta ahora) que todos los tutoriales que he estado buscando no responden o son demasiado antiguos para saber.

1) He intentado algunas búsquedas (quizás no conozca las palabras clave adecuadas), pero no puedo encontrar una lista actualizada de modos de gráficos para cambiar la resolución de la pantalla, etc. Lo mejor que he encontrado es: Tutorial de ensamblador , y casi no creo que sea el 640x480 El mejor lenguaje de ensamblaje de resolución puede usar. ¿Alguien sabe de un tutorial más actualizado que pueda usar?

Editar: la interrupción 10h es antigua y no admite más de 640x480

2) ¿Es posible " mov " ¿Un valor de una variable a otra variable sin moverlo primero a un registro? Ejemplo:

jmp start
  n1     dw 0
  n2     dw 0
  res    dw 0
start:
  mov n1,5
  mov n2,6
  mov res,n1
  add res,n2
...etc...

Editar: No es posible. No puede pasar de la memoria a la memoria sin utilizar registros.

3) Continuando con la pregunta 1, ¿hay alguna forma de detectar qué modo de gráficos está utilizando actualmente un usuario, para que pueda cambiarlo y volver a cambiarlo después? (Supongo que sí, pero no estoy seguro de cómo hacerlo).

Editar: debe consultar la configuración de gráficos del sistema operativo.

¿Fue útil?

Solución

Para las preguntas 1 y 3, consulte Extensiones de BIOS VESA . Esto fue algo así como un estándar para tratar con " Super VGA " Modos, populares en los años 90.

En cuanto al # 2, en general la respuesta es no, no puede mover la memoria a la memoria. Pero no es estrictamente cierto: hay MOVS (cadena de movimiento), que mueve un byte, palabra o palabra de DS: SI a ES: DI. Por lo general, esta instrucción se usa junto con un prefijo REP para mover bloques de memoria. Además, suponiendo que tiene una configuración de pila, puede mover memoria a memoria sin tener que pulsar un registro presionando y haciendo saltar:

PUSH [mem1]
POP  [mem2]

Otros consejos

Con respecto a su primera pregunta, la interrupción 10 es muy antigua y probablemente no se use más allá de las resoluciones de 640x480. Ahora se usa una parte diferente de la pila de software; es decir, tendría que interrogar a Windows para obtener la resolución de pantalla actual.

Esta publicación es bastante detallada contiene muchos detalles sobre cómo usar el ensamblador para manejar DirectX en Windows. DirectX es la familia de API clave para los gráficos en estos días, no llegará muy lejos utilizando las interrupciones de la era DOS y programando el framebuffer VGA directamente.

La interrupción 10h es básicamente una llamada de función del sistema operativo (en realidad ejecuta el código BIOS). Internamente, lee / escribe memoria de video, así como varios registros en la tarjeta gráfica. Para tener una idea de qué tipo de cosas suceden " dentro de " interrumpe 10h, revisa esto fuera.

Cuando ejecuta un programa de DOS en Windows, se ejecuta en una máquina virtual de DOS. Windows en realidad no lo deja tocar la tarjeta gráfica, sino que la deja jugar con una virtual. Por lo general, esto solo se extiende hasta los modos de pantalla VGA (y algunas veces solo el modo de texto), es decir, lo que tiene es una tarjeta VGA virtual (no una tarjeta gráfica moderna). Por esta razón, en lenguaje ensamblador de 16 bits en Windows, simplemente no puede usar todas las capacidades de las tarjetas gráficas modernas.

Sí, claro, el lenguaje ensamblador puede permitirle hacer cualquier cosa que la tarjeta gráfica pueda hacer. Pero solo si cualquiera de las dos:

  • su programa tiene acceso sin restricciones al hardware de gráficos (por ejemplo, está escribiendo un controlador de dispositivo de Windows o Linux, o se está ejecutando en DOS puro, o en su propio kernel), o
  • su programa pasa por la interfaz del sistema operativo correspondiente.

Si todavía estás interesado en lenguaje ensamblador, te sugiero que intentes escribir un kernel de juguete. Al hacer esto, aprenderás una montaña de cosas.

Deja un comentario si quieres más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top