BluePink BluePink
XHost
Servere virtuale de la 20 eur / luna. Servere dedicate de la 100 eur / luna - servicii de administrare si monitorizare incluse. Colocare servere si echipamente de la 75 eur / luna. 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/