ðH www.oocities.org/ar /moni2201/computacion1.htm www.oocities.org/ar/moni2201/computacion1.htm .delayed x "€ÕJ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ `hˆ ¾ OK text/html pÑ2÷ ¾ ÿÿÿÿ b‰.H Sun, 20 Jun 2004 17:03:20 GMT @ Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98) en, * €ÕJ ¾
Programando.
En esta parte de la pagina se indican enlaces
a distitos temas de programacion :
Temas de c++. http://www.oocities.org/ar/moni2201/temas_c.htm
C++,para aquellos que deseen aprender sobre
este tema les aconsejo el curso C++ con clase.
C++ , Programa escrito en
C++,que permite la ordenacion de numeros con subindice de menor a mayor.
El assembler para los que nos interesa la computacion,
deberia ser el tema inicial clave;en palabras de Jorge Gimenez(Trimegistro) http://usuarios.advance.com.ar/trimegis/wintro.txt
,el assembler da la posibilidad de conocer el
hard,la PC en si y permite acelerar otras aplicaciones hechas en lenguaje de
alto nivel como c o basic,aunque el codigo en si es algo confuso,ya que esta
escrito para la maquina.
El lector puede consultar mi pagina Primer programa en
Assembler Hola mundo,que le permitira ir entrando en el tema y Suma de dos numeros ,que
describe como realizar un programa en assembler para sumar dos numeros.
En nuestro caso comencemos con lo siguiente
programa escrito en assembler(el lector puede consultar en este enlace para conocer
mas detalles de como escribir el programa en assembler y ejecutarlo) y que permite generar un punto de colo
en la pantalla:
;El
siguiente programa genera un punto de color en la pantalla
DOSSEG
.MODEL SMALL
.STACK 200h
.CODE
;el siguiente procedimiento cambia el modo de pantalla
mov ah,0h ;funcion 0
mov cx,0h
;columna 0
mov dx,20h ;fila 20
mov ah,0ch ;funcion
escribir el pixel
mov al,2h
;valor del pixel (color 0-3)
mov bh,0h
;pagina de video (hay varias)
int 10h ;ejecuto la
interrupcion
MOV AX, 4C00h
; Exit to DOS sufunction
INT 21h ;
Generate interrupt 21h
END
Cada modo de video tiene dos caracteristicas,
primero la resolucion o numero de pixels horizontales y verticales, 320 y 200 en
nuestro caso, y segundo el numero de colores que pueden aparecer
simultaneamente en pantalla, 256 para nosotros. Por pixel se entiende minimo
elemento (punto) que se puede representar en pantalla.
La ROM-BIOS del PC es una zona de memoria no
modificable, en la cual disponemos de una serie de funciones y servicios para
su uso por el sistema operativo ( utilizables por el usuario ), que gestionan
accesos a disco, control de la tarjeta de video, gestion de impresora, etc.
Estas funciones son las llamadas "interrupciones de software" y
proporcionan al programador todo el control sobre el hardware del PC.
La manera de llamar a una de esas interrupciones, en
lenguaje assembler, consiste en preparar todos los parametros que esta requiera
(cargar los registros del PC, como AX, BX, CX, con los valores adecuados) y
ejecutar la llamada a la interrupcion. Supongamos que queremos iniciar el modo
de video 13h. Cargamos los registros como se solicita y efectuamos la
llamada(escrito en rojo en el programa):
mov ah,0
mov
al,13h
int 10h
Para establecer el modo de video
se puede emplear una funcion del lenguaje de programacion que se trate o bien
llamar directamente a la BIOS, si no se desea emplear la libreria grafica del
compilador, la funcion 0 (AH=0) de servicios de video de la BIOS (INT 10h)
establece el modo de video solicitado en AL.
Pixel: Cuando ejecutamos un
programa en modo grafico, mirando a la pantalla podemos darnos cuenta de que el
dibujo ahi representado esta formado por una serie de unidades minimas (unos
pequenos puntos cuadrados), cada una de ellas con un color, y con la
acumulacion de las cuales se forman las figuras graficas que vemos
representadas en el monitor.
La palabra pixel viene de la
abreviacion del termino ingles PEL -picture element- (elemento del dibujo), y
representa la unidad minima capaz de ser representada por el monitor en esa
resolucion.
Resolucion: Acabamos de nombrar
la palabra resolucion en la definicion de pixel, y es que en la pantalla caben
un numero determinado de pixels (o puntos) a lo ancho y a lo alto de ella. Asi,
podemos ver que, en un determinado juego, en la pantalla caben 320 pixels a lo
ancho y 200 a lo alto,es decir 320x200=64000 puntos, mientras en Windows pueden
caben por ejemplo 640x480 pixels en la misma pantalla.
Programa que llena la pantalla
de puntos de un color.
Supongamos ahora que queremos
llenar toda la pantalla de puntos de un color,como si generamos un fondo de un
color,trabajamos en el modo de video 13h,tenemos que generar 64000
puntos,podemos comenzar con la fila 0 y generar 320 puntos(imprimir) a lo largo
de toda la fila,luego pasar a la fila 1 y generar nuevamente 320 puntos,a
continuacion la fila 3 hasta llegar a la fila 199(de 0 a 199,200 filas),como se
muestra en el siguiente dibujo :
los puntos verdes no se
veran,sino sera un color que cubra toda la pantalla,para ello usamos el
siguiente algoritmo:
;grafico5,es
un programa que imprime toda la pantalla de puntos de un color,como trabajamos
;en el
modo 13h con una resolucion de 320 puntos a lo ancho y 200 puntos a ;lo alto
;que hacen
320x200=64000 puntos en total
dosseg
.model
small
.stack 200h
.code
#######################################################################;Cambiamos el modo grafico
mov ah,0h
mov al,13h ;modo grafico con una resolucion de
320x200 y 256 colores
int 10h ;pongo el modo grafico
#######################################################################;
;la
siguiente parte del programa genera un for-next para las filas y otro
;dentro
del mismo para las columnas
mov dx,0h ;iniciamos la impresion en la fila 0
continuar_filas:
;------------------------------------------------------------------------
mov cx,0h ;iniciamos la impresion en la
columna 0
continuar_columnas:
;------------------------------------------------------------------------
;funcion
que imprime el pixel
mov ah,0ch
mov al,2h
mov bh,0h
int 10h
;------------------------------------------------------------------------
add cx,1h ;aumentamos la columna en 1
cmp cx,013fh ;comparamos si llegamos a la columna 319
;------------------------------------------------------------------------
jz terminar_columnas ;si llegamos a 319 columnas
jmp continuar_columnas
terminar_columnas:
;------------------------------------------------------------------------
add dx,1h ;aumentamos la fila en 1
cmp dx,0c7h ;comparamos si llegamos a la fila 199
jz terminar_filas ;si llegamos a 199 filas terminamos la impresion
jmp continuar_filas
terminar_filas:
;#######################################################################
mov ax,4c00h ;salgo a DOS
int 21h
end
El resultado del programa se ve a
continuacion :
Temas relacionados con lo estudiado :
LOS
FICHEROS EJECUTABLES, http://arte.mundivia.es/astruc/doctxt03.htm
Some Basic Interrupts , http://microasm.emu8086.com/interrupts.html