BluePink 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.
o instructiune in limbaj de asamblare se poate executa in C cu o intructiune de forma asm <nume_intructiune>

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

[2]http://www.cplusplus.com/