Ensamblador - Trazar linea

 
Vista:

Trazar linea

Publicado por btc97 (2 intervenciones) el 14/04/2009 14:20:24
Hola,

A ver si alguien me puede ayudar, ya que estoy al borde de la histeria. Tengo que hacer como parte de un examen, un codigo en ensamblador (emu8086), en el que el usuario con el mouse marque dos puntos en la pantalla y entonces se trace una linea entre esos puntos. Lo del mouse creo que es bastante sencillo ya que se hace por medio de servicios de la interrupcion treinta y algo; pero si alguien me puede ayudar con el codigo para trazar la linea se los agradezco. El pasar o no mi clase depende de ello!
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:Trazar linea

Publicado por btc97 (1 intervención) el 15/04/2009 02:08:59
De hecho, si me pueden ayudar tambien con la cuestion del mouse, pense que iba a ser sencillo, pero no tengo idea como hacerlo. Empece, pero me quede sin poder avanzar, esto es mas o menos lo que intente:
.stack 100h ;tamano de la pila

.data

x db '?'
y db '?'
b db '?'

.code

Inicio:
mov ax, @data
mov ds, ax ;se ubica el segmento de datos

mov ax, 03h
int 33h

shr cx, 1 ;// cx/2
mov [x], cx
mov [y], dx
mov [b], bx

;mov ax, 0003h
;int 33h

end inicio

Puse muchas cosas como mentario, ya que no funcionaron al compilarlas con el emulador.
Por favor, necesito ayuda!!!
Gracias!
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:Trazar linea

Publicado por Perceval (13 intervenciones) el 15/04/2009 21:48:23
Mira es una tonteria pero aca hice una parte no esta lo de la linea...
Si puedo te sigo ayudando el Mousse si funciona porque lo probe y da los numeros
como corresponde.

A la ultima parte no le des bola... Es que enrealidad pense que podia hacer lo siguiente:
Dado el punto de cordenadas X Y, y el numero b X Y
haciendo (Xa+Xb)/(Ya+Yb) = A ....
Ese numero (A) por cualquier otro numero dado te da un numero de relacion de crecimiento en el eje cartesiano... Obviamente no lo termine de probar, era para hacer correctas las cordenadas pero evidentemente asi no va a funcionar o es demasiado problematico porque trabajarias con coma flotante.
ya que tenes que incrementar en numero enteros.... Perdon si estoy diciendo una tonteria tampoco estoy muy seguro Y no Busque si hay una interrupcion de dos, generalmente no trabajo con el modo video, ni hago nada relacionado a graficos. Me quede con la duda... Si que si alguien ayuda somos dos.
AX = 0000h
carga el mouse.
Sobre int 33h

Para tomar los valores del mouse
INT 33h
AX=0003
Retorna
BX=1 ;Si se prisona la boton 1
BX=2 ;Idem etc etc
BX=3
CX = x ;Aca hay un tema , CX es el doble del valor en pantalla. entonces
;tenes que dividirlo por dos.
DX = y

Calculo que tu codigo no funciono porque no lo activaste.

Macro Pixel X, Y
mov al, 1100b ;Color
mov cx, X ;Columna
mov dx, Y ;Fila
mov ah, 0ch
int 10h

endm

; multi-segment executable file template.

data segment
msgFailed db 'El mouse no cargo', 10, 13, '$'
msgOk db 'El mouse cargo correctamente', 10, 13, '$'
pkey db "Presione enter...", 10, 13, '$'
position1 dw ?,?
position2 dw ?
MagicNumber dw ?
ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

mov ax, 0013h ;Modo video
int 10h

xor ax, ax
int 33h
cmp ax, 0ffffh
je MouseOk

MouseFailed:
lea dx, msgFailed
mov ah, 09
int 21h
jmp Salida
MouseOk:
lea dx, msgOk
mov ah, 09
int 21h

mouseClick:
mov ax, 0003h
int 33h
cmp bx, 1
jne mouseClick
mov ax, cx
mov bx, 0002h
div bl
cmp position1[0], 0000h
je pos1
jmp pos2

pos1:
mov position1[0], dx
mov position1[2], ax
jmp mouseClick
pos2:
mov si, ax
add ax, position1[2]
add dx, position1[0]
mov bx, dx
div bl
mov MagicNumber, AX
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

Trazar linea

Publicado por btc97 (2 intervenciones) el 16/04/2009 15:42:03
Gracias! Vi esto y todo bien, pero no logro hacer lo de la linea, le he dado varias vueltas a esto que me diste y a otras cosas que se me ocurrieron a mi. Tengo entendido que hay una interrupcion que pinta pixeles, alguien sabe cual es? Como seria para aplicarlo en mi programa?
Gracias!
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:Trazar linea

Publicado por lupita (1 intervención) el 20/05/2016 04:29:28
mira lo que pasa que necesito que las lineas formen una x intente mover de posición en y pero no veo la funcion en si
espero q me puedas ayudar
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