Está en la página 1de 24

;Autor Victor De la Rocha

;URL http://www.mis-algoritmos.com

;cambiar el fondo a color azul


;poner un pixel color blanco
;usando la tecla
;usando la tecla 8,2,4,6 moveremos el pixel
GRAPH MACRO ;iniciamos modo gráfico
MOV AH,00H
MOV AL,12H
INT 10H
ENDM

PALETA MACRO color ;Permite definir la paleta


MOV AH,0BH
MOV BH,00H
MOV BL,color
INT 10H
ENDM

PUNTO MACRO x,y,color


MOV AH,0CH
MOV AL,color ;Color blanco
MOV BH,0
MOV CX,x
MOV DX,y
INT 10H
ENDM

.model small
.stack
.data
xx dw 1
yy dw 1
x dw 320
y dw 240
.code
.startup

GRAPH ;Seteamos modo gráfico 640*480


PALETA 1 ;Color azul

PUSH AX
PUSH BX

mover:
PUNTO xx,yy,0
PUNTO x,y,7

MOV AH,07H ;READKEY


INT 21H ;

CMP AL,56; Caracter '8'


JE UP
CMP AL,52; Caracter '4'
JE LEFT
CMP AL,54; Caracter '6'
JE RIGHT
CMP AL,50; Caracter '2'
JE DOWN
CMP AL,27; Salir
JE SALIR
JNE mover

;UP:
DOWN:
MOV AX,y
MOV yy,AX ;Guardamos posicion anterior
mov bx,x;X lo movemos a XX
MOV xx,bx
INC AX
MOV y,AX
JMP mover

LEFT:
MOV AX,x
MOV xx,AX ;Guardamos posicion anterior
mov bx,y;X lo movemos a XX
MOV yy,bx
DEC AX
MOV x, AX
JMP mover

RIGHT:
MOV AX,x
MOV xx,AX ;Guardamos posicion anterior
mov bx,y;X lo movemos a XX
MOV yy,bx
INC AX
MOV X, AX
JMP mover

;DOWN:
UP:
MOV AX,y
MOV yy,AX ;Guardamos posicion anterior
mov bx,x;X lo movemos a XX
MOV xx,bx
DEC AX
MOV y, AX
JMP mover

JMP mover

MOV AH,07H ;READKEY


INT 21H ;

SALIR:

MOV AH,00H
MOV AL,03H
INT 10H
.exit
end
Chaz... otra vez ensamblador.. mmm.. creo que eres la misma tipa de la otra vez.. jejeje que
cosas no? encontre un codigo por ahi.. espero te sirva

MOV AH, 0Fh ;Las primeras tres instrucciones guardan


INT 10h ;el modo actual de video que esta usando
PUSH AX ;el sistema operativo
CALL MODO_GRAF
CALL GRAFICAR
CALL PAUSA
POP AX ;Y aqui reestablece el modo que estaba usando
MOV AH, 0 ;el sistema operativo
INT 10h
INT 20h

MODO_GRAF:
MOV AX, 0010H ;Establece el modo de video (AH=0)
INT 10h ;AL=10H modo grafico: 640x350
MOV AH, 0BH ;Establece la paleta de 16 colores
MOV BX, 000BH ;BH=Page=0, BL=Color Verde claro
INT 10H ;Para el fondo de pantalla
RET

GRAFICAR:
MOV BX, 0 ;BL=Color, BH=No. de pagina=0
MOV CX, 64 ;CX es la columna de pixel, coord. X
MOV DX, 70 ;DX es la linea de pixel, coord Y
G10:
MOV AH, 0Ch
MOV AL, BL ;En BL se guardo el color
INT 10h
INC CX ;Incrementa posiscion en x
CMP CX, 576 ;hasta la posicion 576
JNE G10
MOV CX,64
RET

PAUSA: ;Espera a que se pulse una tecla


MOV AH, 10h
INT 16h
RET

Mmm.. pero eso de que presiones enter o la tecla.. no se si borre la pantalla.. y tengas que
volverla a formar.. probare.. y editare mi pregunta si encuentro la solucion.. seria mas facil..
si planteara el problema que te pusieron.. asi sabria que exactamente tiene que hacer..
Presentación hecha en ExpoVision, Alberto Pacheco, Ver 1.0.51,
MEXICO D.R. © 2011

República del Saber Ensamblador: "Video y Gráficas"

Contenido
[Inici [Fina «Atr Sig
o] l] ás »
Mapa Conceptual
1. Modos de Video
2. Tabla Modos de Video
3. Tabla de Colores
4. Barras de Colores en Modo Gráfico
5. Ejercicio: Barras
6. Dibuja la Bandera
7. Mapa de Caracteres del BIOS

(1/7) República del Saber Ensamblador: "Video y Gráficas"

Modos de Video
[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]

Modos Video: En una sesión DOS de


pantalla completa, el monitor puede


operar en dos modos
• Modo Texto: imprime caracteres
• Modo Gráfico: dibuja pixeles
INT 10H: Interrupción del BIOS

encargada de los servicios de video


básicos
(2/7) República del Saber Ensamblador: "Video y Gráficas"

Tabla Modos de Video


[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]
Tabla 1. Modos Video (VGA)

Modo Resol Colores Modo


0 40x25 16 Texto
1 40x25 16 Texto
2 80x25 16 Texto
3 80x25 16 Texto
4 320x200 4 Gráfico
5 320x200 4 Gráfico
6 640x200 2 Gráfico
7 80x25 mono Texto
0DH 320x200 16 Gráfico
0EH 640x200 16 Gráfico
0FH 640x350 2 Gráfico
10H 640x350 16 Gráfico
11H 640x480 2 Gráfico
12H 640x480 16 Gráfico
13H 320x200 256 Gráfico
(3/7) República del Saber Ensamblador: "Video y Gráficas"

Tabla de Colores
[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]
Tabla 2. Códigos para Paleta de 16 colores

Código Color
1 Negro
2 Azul
3 Verde
4 Cian
5 Rojo
6 Magenta
7 Gris claro
8 Gris Obscuro
9 Azul claro
10 Verde claro
11 Cian claro
12 Café
13 Magenta claro
14 Amarillo
15 Blanco
(4/7) República del Saber Ensamblador: "Video y Gráficas"

Barras de Colores en Modo Gráfico


[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]
MOV AH, 0Fh ;Las primeras tres
instrucciones guardan
INT 10h ;el modo actual de video que
esta usando
PUSH AX ;el sistema operativo
CALL MODO_GRAF
CALL GRAFICAR
CALL PAUSA
POP AX ;Y aqui reestablece el modo
que estaba usando
MOV AH, 0 ;el sistema operativo
INT 10h
INT 20h
MODO_GRAF:
MOV AX, 0010H ;Establece el modo de video
(AH=0)
INT 10h ;AL=10H modo grafico: 640x350
MOV AH, 0BH ;Establece la paleta de 16
colores
MOV BX, 000BH ;BH=Page=0, BL=Color Verde
claro
INT 10H ;Para el fondo de pantalla
RET
GRAFICAR:
MOV BX, 0 ;BL=Color, BH=No. de pagina=0
MOV CX, 64 ;CX es la columna de pixel,
coord. X
MOV DX, 70 ;DX es la linea de pixel,
coord Y
G10:
MOV AH, 0Ch
MOV AL, BL ;En BL se guardo el color
INT 10h
INC CX ;Incrementa posiscion en x
CMP CX, 576 ;hasta la posicion 576
JNE G10
MOV CX, 64 ;mueve 64 a CX para usarlo
para decrementar
INC BL ;Incrementa el color BL (0-F)
INC DX ;Incrementa en posicion en y
CMP DX, 280 ;hasta la posicion 280
JNE G10
RET
PAUSA: ;Espera a que se pulse una
tecla
MOV AH, 10h
INT 16h
RET

(5/7) República del Saber Ensamblador: "Video y Gráficas"

Ejercicio: Barras
[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]

Modifique ligeramente el programa


anterior para que dibuje:


1. Barras Diagonales
2. Barras Diagonales Invertidas
3. Franjas Verticales
4. Franjas gruesas de color, e.g.
barras de 8 pixeles de grosor
(6/7) República del Saber Ensamblador: "Video y Gráficas"

Dibuja la Bandera
[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]
MOV AH, 0Fh ;Lee y almacena en stack modo-
video actual
INT 10h
PUSH AX
CALL MODO_GRAF
CALL GRAFICAR
CALL PAUSA
POP AX ;Reestablece modo video
MOV AH,0
INT 10h
INT 20h
MODO_GRAF:
MOV AX, 0010H ;Establece modo video (AH=0)
INT 10h ;Modo grafico (10H): 640x350
MOV AH, 0BH ;Establece paleta 16 colores
MOV BX, 0000H ;BH=Page=0, BL=Fondo=Black
INT 10H
RET
GRAFICAR:
XOR SI, SI ;INDICE: SI=0
XOR BH, BH ;BH=No. Pagina=0
MOV CX, 64 ;CX = Coord. X
MOV DX, 70 ;DX = Coord Y
G10:
MOV AH, 0Ch ;DRAW PIXEL
MOV AL, [COLOR+SI] ;AL=Color
INT 10h
CMP CX, [LIM+SI] ;SIG. COLOR?
JL G20
ADD SI,2 ;INDICE++
G20:
INC CX ;X++
CMP CX, 576 ;LIM X?
JNE G10
XOR SI, SI ;RESET INDEX: SI=0
MOV CX, 64 ;RESET X: CX=64
INC DX ;Y++
CMP DX, 280 ;LIM Y?
JNE G10
RET
PAUSA: ;Espera a que se pulse una
tecla
MOV AH, 10h
INT 16h
RET
SECTION .data
COLOR DW 1, 15, 4
LIM DW 230, 390, 580

(7/7) República del Saber Ensamblador: "Video y Gráficas"

Mapa de Caracteres del BIOS


[Inici [Fina «Atr Sig
o] l] ás »
<< [1] [2] [3] [4] [5] [6] [7] >> [CSS]
main:
call addr
call dump
int 20h
addr: ; Out: es:bp=inicio mapa-bits
mov ah, 11h
mov al, 30h
mov bh, 3 ; 8x8
int 10h
ret
dump:
mov si, bp ; es:bp=bitmap
add si, 8 ; skip chr=0
g30: mov dx, 8 ; LOOP-1: EACH CHAR
g40: mov al, [es:si] ; LOOP-2: EACH BYTE
inc si ; next 8-bits
mov [pixel], al ; save 8-bits
call newline
mov cx, 8 ; pixels=8
g50: mov al, [pixel] ; LOOP-3: EACH BIT
and al, [pos] ; z=0 si al(pos)=1
ror byte [pos],1 ; mask next bit
mov al,'*' ; print bit=1
jnz g60 ; bit=1?
mov al,' ' ; print bit=0
g60: call putch
loop g50 ; ENDLOOP-3: next pixel
dec dx ; next byte
jnz g40 ; ENDLOOP-2: next byte
call getch
cmp al, 27 ; Esc?
jne g30 ; ENDLOOP-1: next char
ret
newline:
mov al, 0dh
call putch
mov al, 0ah
call putch
ret
putch:
push dx
mov ah, 02h
mov dl, al
int 21h
pop dx
ret
getch: ; out: al=ASCII
mov ah, 10h
int 16h
ret
SECTION .data
pos db 10000000b ; bit-mask
pixel db 1

http://expo.itch.edu.mx/view.php?f=asm_33