トレードオフ
現状では:
- IP(命令ポインタ)、SP(スタックポインタ)、FP(フレームポインタ)、F(フラグ)を直接見ることもさわることはできない。
- 関数のプロローグコード、エピローグコードはほとんど不要。FPの保存、スタックのアンワインド(後かたづけ、たたむこと)も機械がやる。
- アドレス方式は、即値、メモリ直接(オペランドが絶対アドレス値)、レジスタ直接(オペランドがレジスタ番号)、レジスタ間接(指定されたレジスタ内容が絶対アドレス値)。
- 定数ディスプレースメントを使ったアドレッシングはない。
- 第二オペランドがレジスタ指定のとき、16ビット中12ビットは余っている。定数ディスプレースメントを入れられる。
変更のpros and cons
- SP, FPを露出させると、ローカル変数操作命令は不要。
- SP, FPを使ったローカル変数操作では、ディスプレースメントが欲しい。
- ディスプレースメントを導入するペナルティは特にない。
- push, popもなくていい。
- IPが見えているなら、call/retもjmpも要らない。
- 見えない/触れないレジスタがあると、setjmp/longjmpが実装できない。
- ローカル変数、手続きのような概念はあえて還元しないで保ったほうがいいのではないか。
- call, ret, push, pop などがあったほうが分かりやすい。これらまでも下位命令で作るのは低水準すぎる。