Vou começar a fazer uma listinha de tutoriais, com alguns truques que estou aprendendo em #emit. Pra quem nгo sabe o que й isto, favor, veja os seguintes links:
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ê deve 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 um array para memуria em #emit
Código do peão: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ê deve 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 um array para memуria em #emit
#emit LOAD.S.alt array
Você não pode manipular os valores internos dela, por isso 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
Código PHP:Vou explicar melhor:
Quando você tem
- Código:
new array [] = {1,2,3,4,5};
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 alguns desses valores de dentro da array, nesse caso, pegará o endereço deles, simplesmente fazendo
Código do peão:- Código:
[size=14][size=13]nova matriz [ ] = { 1 , 2 , 3 , 4 , 5 } ;
novo idx = 2 ; // vou 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 sem 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 ) ;[/size][/size]
[center][/center]
EXEMPLO:
Serve para pegar valores na array (уbvio), veja o exemplo:
- Código:
nova matriz [ ] = { 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 um array no registro secundário
#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 um array
#emit LOAD.I
// armazena o valor de arr[idx] em idx agora
#emit STOR.S.pri idx
// retorna o valor encontrado
#emit RETN
// faz o compilador feliz
return 0 ;
}
Viram? É simples, mas pode-se usar para muitas coisas. Logo que eu puder, estarei fazendo outros tutoriais referentes a outros opcodes não mostrados no tutorial do rjj.
Qualquer erro no tutorial avisem.
Abraços
Qualquer erro no tutorial avisem.
Abraços
Creditos IPSBruno