27.09.2013, 13:29
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
basicamente vocк estarб carregando o valor da VARIAVEL para o registro PRIMБRIO. E quando usamos
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?
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
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
Subtrair
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
E simplesmente, alterou os valores:
Simples nгo?
Abraзos
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
pawn Код:
#emit LOAD.S.ALT VARIAVEL
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
Abraзos