PC-98のプログラム作成に関するエトセトラ - 小ネタ:invokeのマクロ書き換えの是非

容量から考えるinvokeとmacro+proc

invokeで自動作成されるコードは/Sgだったかのコンパイルオプションで確認できます。
で、引数一つにつきaxに入れてpushなどで3バイト前後の処理が入り、最後には必ずspを戻す処理も入ります。
一方でproc内でレジスタに再設定する手間がかかります。

macroの場合は、引数をレジスタに設定してprocを呼び出すと、引数が3つくらいまではsp処理がない分容量が少ない事が多く、proc内での処理も最低限で済みます。
しかし、引数が多くてレジスタに収まらず前処理が必要だったりすると、容量が呼び出し一回毎にどんどん増えていくので、どっちがいいとは言いづらいです。


invokeはC言語などで関数を使う為の機能っぽいので、アセンブラで使うのは邪道かもしれません。
しかし、速度が必要なく、引数が多量に必要なら使った方が手軽に容量削減できます。
また、サブルーチンの試作段階では、usesでレジスタ自動復帰させたり、レジスタを深く考えずに定数を使ってやったりした方が作りやすいと思っています。
その上で内部処理を詰める段階になったら、macroも作って比較検討してやればいいのかなと。

当たり前すぎて書く意味がないような記事だった気がしますが、まあ小ネタなので。