• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

xplod

Assembly - Cordenadas do rato

7 mensagens neste tópico

Alguém me pode ajudar, eu queria fazer uma programa em assembly que  funciona-se o rato com as interrupções (INT 33h) e ao mesmo tempo aparece-se as coordenadas do rato.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que ler a especificação dessa interrupção, que registos usa e para que servem. Depois então começas a pensar numa estrutura para o teu programa, o que tens que inicializar, o que tens que fazer no ciclo principal e o que é necessário fazer para limpar a casa à saída. Podes até fazer algum pseudo-código. Depois disto torna-se muito mais fácil começar a escrever o assembly.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já consegi fazer aparecer o rato mas agora falta me aparecer as corrdenadas já inventei muit  :) mas ainda não consegui :rant_01:

Alguem tem alguma dica

stack segment para stack ; define o seg pilha
db 64 dup('mystack ')
stack ends

mydata segment para 'data'

namepar label byte
erroler db 'erro',0dh,0ah,'$'
maxlenb db 81
actlen db ?
namefld db 80 dup (' '),'$'
filenam db '.\ping.pgm',0
fhand dw ?
mesage db 'Mega Puzzle','$'
coluna dw 10h
linha dw 10h
counter dw 1eh
sum dw 1eh

;teste


mydata ends

mycode segment para 'code' ;define o segmento de cod para o masm
myproc proc far		;nome do procedimento myproc
assume cs:mycode,ds:mydata,ss:stack
push ds			;guarda na pilha o seg. ds
sub ax,ax		;garante zero no AX
push ax			;guarda zero na pilha
;---------------------
mov ax,mydata
mov ds,ax
mov es,ax



;modo gráfico
mov ah,00h	;prepara para definir o modo graf.
mov al,04h	;modo grafico 320x200 color mode
int 10h		;invoca interrupção 10h da bios

mov ax,13h	;prepara a config da palete de cores
;mov bh,00	;inicializa a cor de background
;mov bl,01   ; cor de fundo (azul)
int 10h		;invoca interrupção 10h da bios

;site: http://www.codebreakers-journal.com/content/view/167/
; gray-scale routine
mov     dx,3c8h
CBW                     ; set ax=0
out     dx,al
inc     dx
gs_loop:
out     dx,al
out     dx,al
out     dx,al
inc     ax
jnz     short gs_loop

;---

; chamar procedimentos
call openfil 
call readfil
call texto

;rato powa
mov ax,00h ;reset do rato
int 33h
mov ax, 01h ; inicializa o curso
int 33h

;para sair
mov ah,01 		;espera por uma tecla
int 21h

mov ah, 00h		;prepara para definir o modo graf.
mov al, 02h		;repor modo texto 80x25
int 10h			;invoca interrupção 10h da bios

ret
myproc endp

;;---ler ficheiros
readfil proc near
push ax
push bx
push dx
push cx

lop_ler:

lea dx, namefld ;Address of data buffer
mov bx, fhand 	;Get file handle value
mov cx, 1 		;Read bytes???
mov ah,3fh 		;Read data from the file
int 21h
push ax	

mov ah,0Ch          ;write a string to the 
lea di, namefld	 	;screen using function 

mov al, [di]			;aponta em al para o endereço de memória
push cx
push dx
mov cx, coluna
mov dx, linha

int 10h				 ;interrupçao 10h pa mostrar o pixel
inc cx
mov coluna, cx
cmp cx, 116		;(decimal)compara se já chegou ao final da imagem

je mudalinha		;se sim muda de linha
jmp fin
mudalinha:
	cmp dx, counter
	je saltar_linha

	jmp continua


continua:
	inc dx
	mov linha, dx
	mov coluna, 10h ;ver isto com atenção
	jmp fin

fin:
pop dx
pop cx
pop ax
cmp ax, 1 ;compara os bytes lidos
jge lop_ler
jl the_end


;
saltar_linha:
inc dx
mov ax,counter
add ax,sum
mov counter,ax

cmp dx, 75
	jg continua

jmp mudalinha


;
;



;
;


the_end:	
call closefil
pop cx
pop dx
pop bx
pop ax
ret
readfil endp



;
;---




;rotina de imprimir no ecran
;lea dx,mesage	
texto proc near
mov dx, offset mesage
mov ah,09
int 21h

ret
texto endp

openfil proc near
push ax
push dx
mov al, 02h ;leitura e escrita?

mov ah, 3dh
lea dx, filenam
int 21h
mov fhand,ax
pop dx
pop ax
ret
openfil endp

closefil proc near
push ax
push bx
mov ah,3eh
mov bx,fhand
int 21h
pop bx
pop ax
ret

closefil endp

mycode ends
end

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esqueci me dizer este programa é para fazer um puzzle de uma imgem em *:pgm e que pretendo mostrar também as coordenadas doo rato

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado pela tua disponibilidade.

vou ver o documento com atenção

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só por curiosidade - para que plataforma é que estás a desenvolver isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora