オペランド再考
オペランドについて考え直した。現行ではオペランドとオペコードを区別するMSB、即値とレジスタ指定を区別するビットを使い残り6bitで数値をあらわしていたがもうちょっと工夫する。
オペランド MSB=1 とする。オペコードはMSB=0で区別できる。
type N: オペランドなし
現オペコード|次オペコード
type S: ショート即値(7bit) -64~+63
現オペコード|1sssssss|次オペコード
type L: ロング即値 7bit単位可変長
現オペコード|10000000|{1LLLLLLL}+|次オペコード
type R: レジスタ指定
現オペコード|10000001|1RRRRRRR|次オペコード
type RS: レジスタ&ショート即値指定
現オペコード|10000001|1RRRRRRR|1sssssss|次オペコード
type RL: レジスタ&ロング即値指定
現オペコード|10000001|1RRRRRRR|10000000|{1LLLLLLL}+|次オペコード
type RN: レジスタ指定&Null
現オペコード|10000010|1RRRRRRR|次オペコード
type RR: 2レジスタ指定
現オペコード|10000010|1RRRRRRR|1RRRRRRR|次オペコード
type RRS: 2レジスタ&ショート即値指定
現オペコード|10000010|1RRRRRRR|1RRRRRRR|1sssssss|次オペコード
type RRL: 2レジスタ&ロング即値指定
現オペコード|10000010|1RRRRRRR|1RRRRRRR|10000000|{1LLLLLLL}+|次オペコード
2バイト以上のオペランドでこのフォーマットを満たさないものはInvalid。
これにより即値の範囲は7bitに、レジスタ指定も同様に0~127が指定可能となった。
オペランド MSB=1 とする。オペコードはMSB=0で区別できる。
type N: オペランドなし
現オペコード|次オペコード
type S: ショート即値(7bit) -64~+63
現オペコード|1sssssss|次オペコード
type L: ロング即値 7bit単位可変長
現オペコード|10000000|{1LLLLLLL}+|次オペコード
type R: レジスタ指定
現オペコード|10000001|1RRRRRRR|次オペコード
type RS: レジスタ&ショート即値指定
現オペコード|10000001|1RRRRRRR|1sssssss|次オペコード
type RL: レジスタ&ロング即値指定
現オペコード|10000001|1RRRRRRR|10000000|{1LLLLLLL}+|次オペコード
type RN: レジスタ指定&Null
現オペコード|10000010|1RRRRRRR|次オペコード
type RR: 2レジスタ指定
現オペコード|10000010|1RRRRRRR|1RRRRRRR|次オペコード
type RRS: 2レジスタ&ショート即値指定
現オペコード|10000010|1RRRRRRR|1RRRRRRR|1sssssss|次オペコード
type RRL: 2レジスタ&ロング即値指定
現オペコード|10000010|1RRRRRRR|1RRRRRRR|10000000|{1LLLLLLL}+|次オペコード
2バイト以上のオペランドでこのフォーマットを満たさないものはInvalid。
これにより即値の範囲は7bitに、レジスタ指定も同様に0~127が指定可能となった。
"オペランド再考" へのコメントを書く