Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Hiiren käsittelyä Assemblylla

Sivun loppuun

HtH [07.07.2002 14:17:23]

#

Tässäpä pieni esimerkki kuinka käsitellä hiirtä assemblylla. Koko hiiren käsittely käy keskeytyksellä 33h. Ja jollain subfunktiolla. Tarkempia ohjeitä löytyy laamatutista luvusta 5.5, vaikka se onkin C ohjelmointia käsittelevä opas. Tämä koodiesimerkki ei tee itseasiassa mitään muuta, kuin vain näyttää hiiren kursoria ruudulla, ja napinpainalluksen jälkeen lähtee pois. Itselläni on kehitteillä hiiri kirjasto QB:lle, joka on ohjelmoitu 100% assemblylla. Sen lähdekoodin voin joskus laittaa tänne.

.MODEL SMALL
.STACK 20h
.DATA
assmouse DB 13,10,"Liikuttele hiirtä, se toimii!",13,10,"$"
nomousee DB 13,10,"Ei ole hiirtä!$"

.CODE

;Tekstin tulostus
mov ax, @data
mov ds, ax
mov dx, OFFSET assmouse
mov ah, 9h
int 21h

;Hiiren alustus
xor ax, ax
int 33h
cmp ax, 0h
je nomouse ;Jos ei hiirtä

;Hiiren näyttö
mov ax, 1h
int 33h

;Napin painalluksen odotus
mov ah, 0h
int 16h

;Hiiren piilotus
mov ax, 2h
int 33h

jmp loppu
;Jos ei hiirtä
nomouse:
mov ax, @data
mov ds, ax
mov dx, OFFSET nomousee
mov ah, 9h
int 21h

;Ohjelman lopetus
loppu:
mov ax, 4c00h
int 21h

END

HtH [08.07.2002 19:05:39]

#

Voin vielä selittää, että saat selville hiiren X ja Y koordinaatit, sekä hiiren namiskat subfunktiolla(ah) 3h ja keskeytyksella 33h(kuten kaikki muutkin hiiren käsittelyt) jolloin CX on x koordinaati dx y koordinaati ja bx on nappien tila bitti 0 on vasen 1 oikea ja 2 keskimmäinen.

thefox [09.07.2002 14:31:10]

#

Olisi vähän optimoinnin varaa tuossa ;)

HtH [09.07.2002 17:03:32]

#

Joo, kyllähän siinä, mutta esimerkiksi ihan ok, kai? Ja olisihan siinä voinut demonstroida tuota hiiren x ja y koordinaatien selville saantia.

HtH [09.07.2002 17:13:34]

#

Turhia moveja tuosta kyllä löyty... Kiireessä laitoin, ni unohtu. Mut tarkoitus kuitenkin tulee selville, toivottavasti.

Dogzoid [03.08.2002 05:01:00]

#

Tuota, olen itse assembly-friikki ja päätin kommentoida koodia.
cmp ax,0h voi korvata or ax,ax käskyllä joka on pienempi. eli koodi tulisi tuossa kohti olemaan seuraavanlainen: or ax,ax
jz nomouse

(nimetön) [04.09.2002 20:38:55]

#

Noh, aika lyhyt oli koodi, ois voinu liittä osoittimen vaihdon.

tejeez [27.07.2003 21:36:19]

#

Miten se osoitin vaihdetaan?!

Olli Vanhoja [19.01.2005 11:25:52]

#

Hmm... voishan semmosen koodinpätkän tänne sendiä. Nyt vasta huomasin viestisi ;)

Dude [19.08.2007 22:25:41]

#

Kääntyykö yasmilla(nasm yhteensopiva)?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta