BluePink XHost |
Oferim servicii de instalare, configurare si monitorizare servere linux (router, firewall, dns, web, email, baze de date, aplicatii, server de backup, domain controller, share de retea) de la 50 eur / instalare. Pentru detalii accesati site-ul BluePink. |
In limbaj de asamblare o instructiune este de forma <nume_intructiune><cod_op1,cod_op2,...,cod_opn>(intructiunile de limbaj de asamblare sunt specificate in [1])
void mouseInit()
{
asm mov ax,0;
asm int 33h;
}
aceasta este o functie de initializare a mouse-ului.
int keypress()
{
asm mov ah,1
asm int 16h
asm jnz adevarat
return 0;
adevarat:
asm mov ah,0
asm int 16h
return 1;
}
mov ah ,1
int 16
este o pereche de instructiuni care verifica daca s-a apasat o tasta, daca o tasta s-a apasat indicatorul de zero devine 1 altfel va fi 0
In cazul in care este zero sare la urmatoarea pereche de instructiuni.
mov ah,0
int 16h
golind bufferul , dupa care intoarce 1 pentru adevarat , alfel va fi 0.
int mouseclick()
{
asm mov bx,0;
asm mov ax,3h;
asm int 33h;
if(_BX>0 && _BX<4)
return 1;
return 0;
}
In aceasta functie
mov bx,0 inseamna implicit ca nu a fost apasata o tasta de mouse
folosind cele 2 intructiuni
mov ax,3h;
int 33h;
care verifica daca s-a apasat click, si aceasta va tine evidenta in registru BX reprezentat de pseudo-variabila _BX, care va fi un numar intreg si va avea valorile 1,2 sau 3, in cazul in care a fost apasata se va intoarce valoarea 1 altfel bx ramane 0 de la prima intructiune din corpul functiei si se intoarce valoarea 0.
int mouseX()
{
asm mov ax,3h;
asm int 33h;
return _CL;
}
int mouseY(){
asm mov ax,3h;
asm int 33h;
return _DL;
}
perechea de instructiuni
mov ax,3h;
int 33h;
aceasta va pune coordonata X a mouse-ului in registru CL iar coordonata y in DL
int mousemove()
{
if(mouseX()!=x && mouseY()!=y)
{
x=mouseX();
y=mouseY();
return 1;
}
return 0;
}
se folosesc functiile mouseX() si mouseY(), se au in vedere variabilele globale x,y care sunt numere intregi pe 16 biti cu semn.
conditia de la if verifica daca s-a mai schimbat pozitia cursorului, dupa care se actualizeaza cu cele doua functii intorcandu-se valoarea 1 altfel va fi valoarea 0.
int event()
{
if(keypress())
return 0;
if(mouseclick())
return 1;
if(mousemove())
return 2;
return -1;
}
aceasta functie intoarce valoarea 0 daca o tasta a fost apasata ,1 daca a fost dat click si 2 daca s-a deplasat cursorul mouse-ului,-1 daca nici una din acesta nu s-a intamplat
void main()
{
time_t start,end;
x=mouseX();
y=mouseY();
start=time(NULL);
end=start;
while(difftime(end,start)<120)
{
if(event()>-1)
{
start=time(NULL);
}
printf("\n%i:%i",(int)(120-difftime(end,start))/60,(int)(60-(int)difftime(end,start)%60)%60);
end=time(NULL);
}
printf("MULTUMIM CA ATI ASTEPTAT");
}
functia time(este explicata in [2]), este functia care intoarce numarul de secunde trecute de la ora 0:00 1 ianuarie 1970
functia difftime calculeaza diferenta dintre doua momente de timp si aceasta este exprimata in secunde.
in ciclu while daca s-a intamplat un eveniment din cele enumerate mai sus atunci se reseteaza cronometru cu cu intructiunea start=time(NULL); se afiseaza timpul ramas din executia ciclului cu printf iar cu intructiunea end=time(NULL); se actualizeaza timpul ramas si dupa terminarea timpului in care nu s-a intamplat nimic se iese din ciclu, iar timpul acela este de 2 minute.
urmat de mesajul afisat pe ecran MULTUMIM CA ATI ASTEPTAT si programul se termina.
[1]http://www.emu8086.com/interrupts.html