今日進んだのはPUSHとPOPがほとんど。200行ぐらい削ったがそれは1命令ごとに1クラス用意していたのを、何命令かまとめたクラスを1つ用意することで、ほぼ同じ内容だったいくつかのクラスを消した。具体的には以下のような変更である
変更前
instructions[0x50] = new PushAX(); instructions[0x51] = new PushCX(); instructions[0x52] = new PushDX(); instructions[0x53] = new PushBX();
変更後
instructions[0x50] = new Push(EAX); instructions[0x51] = new Push(ECX); instructions[0x52] = new Push(EDX); instructions[0x53] = new Push(EBX);
PUSHやPOPはレジスタごとに別の命令になっているが、これらを実装したクラスで違うのはレジスタ番号だけだったので、コンストラクタでレジスタ番号を受け取るクラス1つあれば解決できる。なので、いくつもあったPUSHやPOPのクラスを排除できた。
今回実装した命令
- PUSH(06)
- PUSH(0E)
- PUSH(16)
- PUSH(1E)
- PUSH(68)
- PUSH(6A)
- PUSH(0F A0)
- PUSH(0F A8)
- POP(07)
- POP(17)
- POP(1F)
- POP(0F A1)
- POP(0F A9)
- Operand Prefix(66)
- Address Prefix(67)
削った行数 | 200行ぐらい |
進んだ行数 | 100行ぐらい |
現在の行数 | 3217行 |