#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;
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎