#include "a_samp" main() { new a[3] = {111, 222, 333}, b[5][5] = { {91, 92, 93, 94, 95}, {96, 97, 98, 99, 910}, {911, 912, 913, 914, 915}, {916, 917, 918, 919, 920}, {921, 922, 923, 924, 925} }, c[3][3][3] = { { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }, { {11, 22, 33}, {44, 55, 66}, {77, 88, 99} }, { {111, 222, 333}, {444, 555, 666}, {777, 888, 999} } }, v = 0; // a[1] -> 222 #emit ADDR.pri a // a #emit ADD.C 4 // a[1] #emit LOAD.I #emit STOR.S.pri v printf("%d", v); // a[1] = 222 // b[1][1] -> 97 #emit ADDR.pri b // b #emit ADD.C 4 // b[1] #emit MOVE.alt #emit LOAD.I #emit ADD #emit ADD.C 4 // b[1][1] #emit LOAD.I #emit STOR.S.pri v printf("%d", v); // b[1][1] = 97 // c[1][1][1] -> 55 #emit ADDR.pri c // c #emit ADD.C 4 #emit MOVE.alt #emit LOAD.I #emit ADD // c[1] #emit ADD.C 4 #emit MOVE.alt #emit LOAD.I #emit ADD // c[1][1] #emit ADD.C 4 // c[1][1][1] #emit LOAD.I #emit STOR.S.pri v printf("%d", v); // c[1][1][1] = 55 print("---------------"); printf("%d", func(a, 1)); // a[1] = 222 printf("%d", func(b, 1, 1)); // b[1][1] = 97 printf("%d", func(c, 1, 1, 1)); // c[1][1][1] = 55 } func(...) { new args = 0; #emit LOAD.S.pri 8 // get args (in bytes) #emit STOR.S.pri args if(args == 8) // 2 args { #emit LOAD.S.pri 12 #emit LREF.S.alt 16 #emit SHL.C.alt 2 #emit ADD #emit LOAD.I #emit STACK 4 #emit RETN } else if(args == 12) // 3 args { #emit LOAD.S.pri 12 #emit LREF.S.alt 16 #emit SHL.C.alt 2 #emit ADD #emit MOVE.alt #emit LOAD.I #emit ADD #emit LREF.S.alt 20 #emit SHL.C.alt 2 #emit ADD #emit MOVE.alt #emit LOAD.I #emit STACK 4 #emit RETN } else if(args == 16) // 4 args { #emit LOAD.S.pri 12 #emit LREF.S.alt 16 #emit SHL.C.alt 2 #emit ADD #emit MOVE.alt #emit LOAD.I #emit ADD #emit LREF.S.alt 20 #emit SHL.C.alt 2 #emit ADD #emit MOVE.alt #emit LOAD.I #emit ADD #emit LREF.S.alt 24 #emit SHL.C.alt 2 #emit ADD #emit LOAD.I #emit STACK 4 #emit RETN } return 0; }