Ensamblador - desplazar linea un pixel

 
Vista:

desplazar linea un pixel

Publicado por Brads (1 intervención) el 31/05/2008 22:50:53
Saludos:
Lean este programa:
-Realice un programa en lenguaje ensamblador que dibuje en modo gráfico una línea vertical de

2 píxel de grosor (2 colores diferentes) y la desplace hacia la izquierda o a la derecha, 1

píxel, una vez pulsado el cursor correspondiente (S
ó U). Debe considerar que al llegar a los extremos de la pantalla, por ejemplo al extremo

izquierdo, si se pulsa el cursor que implique mover la línea hacia la izquierda (S),

aparecerá una línea vertical de 1 píxel en el extremo derecho
(color más a la izquierda) y la otra del mismo grosor en el extremo izquierdo
(color más a la derecha) y si se pulsa ese mismo cursor nuevamente aparecerá
la línea de 2 píxeles (colores originales) de grosor en el extremo derecho. El programa

termina si se pulsa la tecla ESC.

He intentado hacerlo de varias formas pero me he enredado a la hora de simular el

desplazamiento de la linea que dibujo, un pixel a la derecha o a la izquierda. Uso la instrucción

'shr' para rotar bits pero igual me enredo; pues hay que hacer varias validaciones las cuales me

pierden por completo. Me pregunto si alguno de ustedes conoce una manera mas facil de darle

solucion al problema.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:desplazar linea un pixel

Publicado por MSH (120 intervenciones) el 04/06/2008 03:02:27
Saludos:
La explicación de las condiciones de las lineas verticales al llegar a los extremos no me queda clara, pero traté de interpretarla, y aquí está el ejemplo

;--------------------------------------------------------------------------------------------------------------------
.model small

.stack

.data

y1 dw 180

x01 dw 320 ;coordenadas línea 1
y01 dw ?

x02 dw 322 ;coordenadas linea 2
y02 dw ?

color1 db 0ch
color2 db 0ah
negro db 00h

.code

.startup

mov ax,@data
mov ds,ax
push ds
pop es

mov ax,0600h
mov bh,00h
mov cx,0000h
mov dx,314fh
int 10h

mov ah,0h
mov al,12h
int 10h

call dpixel

key:

mov ah,08h
int 21h
cmp al,27
je salir
cmp al,100 ;'d' minúscula
je der
cmp al,105 ;'i' minúscula
je izq
jmp key

der: call derecha
jmp key

izq: call izquierda
jmp key

salir: call termina
;.................................................................
borrow proc
mov ax,y1
mov y01,ax
mov y02,ax
pix1:
mov ah,0ch
mov al,negro
mov cx,x01
mov dx,y01
int 10h
cmp dx,280
je pix2
inc y01
jmp pix1

pix2:
mov ah,0ch
mov al,negro
mov cx,x02
mov dx,y02
int 10h
cmp dx,280
je s1
inc y02
jmp pix2
s1:
ret
borrow endp
;...............................................................................
dpixel proc
mov ax,y1
mov y01,ax
mov y02,ax

pixel1:
mov ah,0ch
mov al,color1
mov cx,x01
mov dx,y01
int 10h
cmp dx,280
je pixel2
inc y01
jmp pixel1

pixel2:
mov ah,0ch
mov al,color2
mov cx,x02
mov dx,y02
int 10h
cmp dx,280
je sales
inc y02
jmp pixel2
sales:
ret
dpixel endp
;...............................................................................
derecha proc
call borrow
mov ax,y1
mov y01,ax
mov y02,ax
inc x01
inc x02
cmp x02,639
je l1
jmp brinco1

l1:
mov ah,0ch
mov al,color2
mov cx,639
mov dx,y01
int 10h
cmp dx,280
je l2
inc y01
jmp l1

l2:
mov ah,0ch
mov al,color1
mov cx,0000
mov dx,y02
int 10h
cmp dx,280
je s2
inc y02
jmp l2

brinco1:
call dpixel
s2:
ret
derecha endp
;..............................................................................
izquierda proc
call borrow
mov ax,y1
mov y01,ax
mov y02,ax
dec x01
dec x02
cmp x01,0000
je l3
jmp brinco2
l3:
mov ah,0ch
mov al,color2
mov cx,000
mov dx,y01
int 10h
cmp dx,280
je l4
inc y01
jmp l3

l4:
mov ah,0ch
mov al,color1
mov cx,639
mov dx,y02
int 10h
cmp dx,280
je s3
inc y02
jmp l4

brinco2:
call dpixel
s3:
ret
izquierda endp
;..............................................................................
termina proc
mov ah,00h ;le regresa el control a MS-DOS
mov al,03h
int 10h

.exit ;fin de procedimiento
termina endp
end ;fin del programa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:desplazar linea un pixel

Publicado por Fatima (1 intervención) el 02/05/2010 06:09:33
Yo también necesito algo parecido y no tengo idea de como resolverlo si encuentras una forma por favor envíamela este es el planteamiento del problema por favor solo tengo una semana

Realice un programa en lenguaje ensamblador que dibuje en modo gráfico una línea de 4 píxeles de 
grosor   (2   colores   diferentes).   Al   comenzar   el   programa   la   línea   debe   aparecer   en   el   medio   de   la 
pantalla. 
• La línea se desplazara (similar al juego de la serpiente) hacia arriba o hacia abajo si se aprietan 
las flechas arriba y abajo respectivamente. 
• En cada momento la línea se desplazará 1 píxel en el sentido especificado.
• Debe considerar que al llegar a los extremos de la pantalla que hacer de acuerdo a la tecla de 
dirección que se presione.
• Deben aparecer en la pantalla cuadros de aproximadamente 4x4 pixels si la línea choca con 
alguno de ellos crece en 2 pixels y el cuadro desaparece.
• Si se aprieta la tecla ENTER se debe invertir el orden de los colores de la línea. 
• El  programa finaliza cuando choque con alguno de los extremos de la pantalla o se  hayan 
comido todos los cuadros de la pantalla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar