アセンブラの難しさ?

これまた、きっと、今更な話だと思うのだけれど、
アセンブラだけでプログラムを記述するのは、やっぱり、大変だ。
つまり、要するに、何でもありの無法地帯が大問題になったりする。


アセンブラは、即ち、ほぼプロセッサの命令その物であるわけだから、
そのプロセッサの特徴・特質に大きく影響を受ける。
x86の一つの特徴としてレジスタの数が少なめである点がある。
出来ればレジスタのみで処理が完結するのであれば、それに越した事はない。
が、しかし、少々処理が複雑になると、すぐにレジスタが足らなくなる。
足らない場合は、メモリに現在のレジスタの内容を退避して、必要なレジスタを確保する。
一般的にはスタックへ積んでおく場合が多いように思う。
これが、一連の流れの中であれば、まぁ、ちまちま修正も可能なのだが、
サブルーチンの中だったりすると、呼び出し先と呼び出し元の整合性が必要になるから大変だ。


今日も、そんな事で、困り果てている。
今まで、最低限の要求仕様で用意していたサブルーチンに、機能を追加しようとしたわけだが、
戻り値として今まで非破壊を前提としていたレジスタを使おうと思ったら、
呼び出し元では、そのレジスタをループのカウンタに使っていたよ... みたいな。
いや〜、呼び出し規約って大事だよな〜、とか、しみじみ思うわけです。苦笑


しかし、これ、どうすっかなぁ...