27.09.2013, 06:20
(
Last edited by ipsBruno; 27/09/2013 at 06:57 AM.
)
Vou comeзar a fazer uma listinha de tutoriais, com alguns truques que ando aprendendo em #emit. Pra quem nгo sabe o que й isto, favor, veja os seguintes links:
https://sampforum.blast.hk/showthread.php?tid=360155
https://sampforum.blast.hk/showthread.php?tid=315531
Como podem ver, ambos tutoriais estгo incompletos. Porque й simplesmente dнficil demais, ensinar #emit, tem muitos opcodes (que nem eu mesmo consegui aprender) e por este motivo й necessбrio que se faзam muitos tutoriais. Pois bem, antes de tudo. Vocкs devem saber o bбsico de #emit para pelo menos entender esse tutorial.
Nesse pequeno tutorial, vou explicar como й o uso do opcode IDXADDR. Que nгo foi bem explicado em alguns tutoriais. Vamos lб!
Basicamente, quando vocк carrega uma array para memуria em #emit
Vocк nгo poderб manipular os valores internos dela, por isto existe o IDXADDR, que basicamente й a abreviatura de INDEX ADDRESS, pois vocк estб pegando o valor address INDEX de uma array atravйs do endereзo dela. Entenderam? Nгo?
Vou explicar melhor:
Quando vocк tem
Em #emit, й muito complicado pegar um ъnico valor desta array (seja 1,2,3,4 ou 5) por este motivo, usando IDXADDR vocк pode combinar o armazenamento ALT (alternativo) com o PRI (primбrio) e pegar algum desses valores de dentro da array, nesse caso, pegarб o endereзo deles, simplesmente fazendo
EXEMPLO:
Serve para pegar valores na array (уbvio), veja o exemplo:
Viram? Й simples, mas pode-se usar para muitas coisas. Logo que eu puder, estarei fazendo outros tutoriais referente a outros opcodes nгo mostrados no tutorial do rjj.
Qualquer erro no tutorial avisem.
Abraзos
https://sampforum.blast.hk/showthread.php?tid=360155
https://sampforum.blast.hk/showthread.php?tid=315531
Como podem ver, ambos tutoriais estгo incompletos. Porque й simplesmente dнficil demais, ensinar #emit, tem muitos opcodes (que nem eu mesmo consegui aprender) e por este motivo й necessбrio que se faзam muitos tutoriais. Pois bem, antes de tudo. Vocкs devem saber o bбsico de #emit para pelo menos entender esse tutorial.
Nesse pequeno tutorial, vou explicar como й o uso do opcode IDXADDR. Que nгo foi bem explicado em alguns tutoriais. Vamos lб!
Basicamente, quando vocк carrega uma array para memуria em #emit
pawn Code:
#emit LOAD.S.alt array
Vou explicar melhor:
Quando vocк tem
PHP Code:
new array [] = {1,2,3,4,5};
pawn Code:
new array[] = {1,2,3,4,5};
new idx = 2; // irei pegar o endereзo do elemento 2 da array, no caso da parte 3
new arrayvalue; // cйlula para armazenamento do valor
// carregar array para o registro alternativo
#emit LOAD.S.alt array
// carregar o valor de idx para o registro primбrio
#emit LOAD.S.pri idx
// IDXADDR, neste caso iria armazenar no registro prнmario: array[iter]
#emit IDXADDR
// para demonstraзгo, salvarei o valor de array[idx] em arrayvalue
#emit STOR.S.pri arrayvalue
// mбgica! arrayvalue agora tem o valor address da array, que era array[idx] addr
printf("%d", arrayvalue);
EXEMPLO:
Serve para pegar valores na array (уbvio), veja o exemplo:
pawn Code:
new array[] = {48481,184};
printf("%d", getidx(array, 1)); // 184
stock getidx(arr[], idx) {
// carrega no registro primбrio o idx
#emit LOAD.S.pri idx
// carrega a array no registro secundario
#emit LOAD.S.alt arr
// pega o endereзo de arr[idx]
#emit IDXADDR
// armazena o valor do endereзo em idx
#emit STOR.S.pri idx
// carrega a array
#emit LOAD.I
// armazena o valor de arr[idx] em idx agora
#emit STOR.S.pri idx
// retorna o valor encontrado
#emit RETN
// faзa o compilador feliz
return 0;
}
Qualquer erro no tutorial avisem.
Abraзos