[Tutorial] Alterar variбveis com #emit
#1

Essa й a terceira etapa do tutorial. Bem, essa й um pouco mais complicada, mas nгo impede ninguйm de entender, na verdade essa etapa apenas serб para variбveis com STOR e LOAD e futuramente estarei explicando melhor STACK e os outros operadores que #emit dispхe.


Em #emit. Tem dois opcodes bastante importantes chamados STOR E LOAD. Basicamente, LOAD carrega, e STOR SALVA. Como de costume, й tudo baseado em registros primбrios e secundбrios, portanto, novamente as operaзхes serгo feitas em PRI E ALT.



Quando usamos


pawn Код:
#emit LOAD.S.PRI VARIAVEL
basicamente vocк estarб carregando o valor da VARIAVEL para o registro PRIMБRIO. E quando usamos

pawn Код:
#emit LOAD.S.ALT VARIAVEL
estaremos carregando no registro secundбrio. Como de padrгo, podemos usar os operadores aritmйticos, que ensinei no tutorial anterior. Logo podemos montar algo como


Quanto й 10 + 5?


pawn Код:
new var1 = 5;
new var2 = 10;

new resultado;


// carrega o valor de var1 na memуria PRIMARIA
#emit LOAD.S.PRI var1

// carrega valor de var2 na memуria SECUNDARIA
#emit LOAD.S.ALT var2

// como ensinei antes, vai somar o valor de PRI + ALT ou (5 + 10 conforme as variбveis)
#emit ADD



Pois bem, executamos a soma de var1 + var2. Porйm, como vamos retornar os dados senгo com RETN? Simples, й pra isto que vem STOR, que irб salvar os dados em resultado. Apenas usando


pawn Код:
// vai salvar o resultado de var1 + var2 na variбvel resultado. Sempre use PRI nestes casos, pois й a memуria principal e й onde o valor das operaзхes ficam salvas
#emit STOR.S.PRI resultado


// imprimir para checar
printf("var1 + var2 = %d", resultado);




Mas e Bruno, podemos usar outros operadores alйm de ADD?


Claro! Muitos operadores sгo aceitos, em especial os aritmйticos que ensinei na etapa anterior. Basta fazer:




Multiplicar
pawn Код:
new var1 = 5;
    new var2 = 10;

    new resultado;


    #emit LOAD.S.PRI var1

    #emit LOAD.S.ALT var2

    #emit SMUL // multiplica var1 x var2


    #emit STOR.S.PRI resultado

    printf("%d", resultado);




Subtrair
pawn Код:
new var1 = 5;
    new var2 = 10;

    new resultado;


    #emit LOAD.S.PRI var1

    #emit LOAD.S.ALT var2

    #emit SUB // subtrai var1 - var2


    #emit STOR.S.PRI resultado

    printf("%d", resultado);

e qualquer outra operaзгo que mostrei antes. Alйm disto, se pensares bem, tambйm pode atй trocar o valor das variбveis, uma pela outra


pawn Код:
new var = 10;
new vor = 20;


printf("%d e %d", vor, var);

#emit LOAD.S.PRI var
#emit LOAD.S.ALT vor

#emit STOR.S.PRI vor // coloca VAR em VOR
#emit STOR.S.ALT var // coloca VOR em VAR

printf("%d e %d", vor, var);


E simplesmente, alterou os valores:

Код:
[10:32:35] 20 e 10
[10:32:35] 10 e 20
Simples nгo?


Abraзos
Reply


Messages In This Thread
Alterar variбveis com #emit - by ipsBruno - 27.09.2013, 13:29
Re: Alterar variбveis com #emit - by RuanRider - 27.09.2013, 13:31
Re: Alterar variбveis com #emit - by ipsBruno - 27.09.2013, 13:36
Re: Alterar variбveis com #emit - by WLSF - 27.09.2013, 19:15
Re: Alterar variбveis com #emit - by Falcon. - 27.09.2013, 19:44
Re: Alterar variбveis com #emit - by WLSF - 27.09.2013, 20:01
Re: Alterar variбveis com #emit - by ipsBruno - 27.09.2013, 20:02
Re: Alterar variбveis com #emit - by Falcon. - 28.09.2013, 03:55
Re: Alterar variбveis com #emit - by ipsBruno - 28.09.2013, 04:08
Re: Alterar variбveis com #emit - by zSuYaNw - 28.09.2013, 04:12

Forum Jump:


Users browsing this thread: 1 Guest(s)