整数レジスタに付随するbitについて
はじめに
- osecpu-vm.hのOsecpuVmという構造体の中には、bit[]という見慣れぬメンバ変数があります。これについての説明です。
- 基本的に以下の話は、VMを改造しようという人だけが気にすればいい話です。アプリを作る人は気にする必要はありません。
(1)
- bit[]はRxxの有効ビット数を保持しています。これはそのRxxに最後に代入した命令のbitの値がそのまま入っています。
- つまり32bit演算をした結果が入っているのなら32が入っていますし、8bit演算をした結果が入っているのなら8が入っています。
- このbitで表される数字以上の上位のビットについては、どんなゴミデータが入っていようともそれは無視しなければいけません。
- OSECPU-VMではbitの値を超える演算を認めません。たとえばR02のbitが16だったら、R02の値を使ってADD32などはできないのです。なぜなら、そんなことを認めたらゴミデータを参照して誤動作するかもしれないからです。
- R02の値を変更せずにbitだけを上げる方法があって、それはSBX命令です。SBXはbitの値を上げるだけではなく、R02を指定されたビット数で適正な値になるように、ゴミデータを部分を符号拡張によってクリアします。
- ですからSBX命令を使ってbitを上げてやればADD32にも使えるようになります。
こめんと欄