もう少しこの場合に即して考えてみる。
サンプル1
stick 16
サンプル1はstick命令のパラメータとして数値を渡したものです。
この場合、当然エラーになるわけですが、そのエラーは「変数名が指定されていません」になります。
サンプル2
stick a&16
サンプル2はstick命令のパラメータとしてa&16を渡したものです。
この場合のエラーは「システムエラーが発生しました」となります。
サンプル1の時とはエラー内容が違います。a&16が数値として渡されていれば、サンプル1と同じく「変数名が指定されていません」というエラーになるはずです。つまり、a&16は数値として渡されていないということです。
サンプル3
stick 16&a
サンプル3はstick命令のパラメータとして16&aを渡したものです。サンプル2とは演算順序が異なります。
この場合のエラーは「変数名が指定されていません」となります。
このエラーはサンプル1と同じものなので、16&aは数値として渡されていると推測できます。
しかし、サンプル2と3で違うエラーが発生することに疑問が残ります。サンプル2と3は、パラメータとしてそれぞれa&16、16&aを渡していますが、これらは単独で用いた場合は同じ結果を示すはずです。それなのに、なぜstick命令のパラメータとして渡した時は違う結果になるのでしょうか。
それは以下のように考えられます。
変数名を指定すべきパラメータに演算式(計算式、条件式)を指定したとき、
1.「a&16」のように、まず変数名がくる場合
→パラメータを変数名として解釈するが、……あとはFUJIさんのおっしゃる通りでしょう。
2.「16&a」のように、まず数値(もしくは文字列など)がくる場合
→パラメータを数値(もしくは文字列など)として解釈するが、変数名ではないので「変数名が指定されていません」となる。
一応これで説明がつきます。