17. フラグレジスタ
■フラグレジスタ
条件分岐などで使うフラグの集合
➔ 演算で変化するフラグ
- Carry Flag
- Parity Flag
- Adjust Flag
- Zero Flag
- Sign Flag
- Overflow Flag
➔ 特定の命令で変化するフラグ
- Direction Flag
- Intteerupt Enable Flag
17
32. Java で実装 その2 (2/4)
■Java で実装 その2 (2/4)
public class InstructionMap{
private Instruction[] instructions;
public InstructionMap(){
instructions = new Instruction[256];
}
public void init(){
instructions[0x01] = new AddRMXRX();
instructions[0x03] = new AddRXRMX();
instructions[0x04] = new AddALImm8();
instructions[0x05] = new AddAXImmX();
instructions[0x06] = new Push(ES);
...
}
}
32
33. Java で実装 その2 (3/4)
■Java で実装 その2 (3/4)
public class OperandPrefix implements Instruction{
public void execute(VM vm){
int code = vm.getCode8(1);
vm.setOperandPrefix(true);
vm.addEIP(1);
Instruction instruction = vm.getInstruction(code);
instruction.execute(vm);
vm.setOperandPrefix(false);
}
}
33
34. Java で実装 その2 (4/4)
■Java で実装 その2 (4/4)
public class VMUtil{
public static int getMod(int modrm){
return ((modrm & 0xC0) >> 6) & 0x03;
}
public static int getRegisterIndex(int modrm){
return ((modrm & 0x38) >> 3) & 0x07;
}
public static int getOpecode(int modrm){
return getRegisterIndex(modrm);
}
public static int getRM(int modrm){
return (modrm & 0x07);
}
34
35. ここからが本番
■OS をブートしたい
ブートセクタを 0x7C00 に置く
フロッピーブートだと先頭 512byte
CD だと少し大変
➔ El Torito に従ってブートセクタを読み込む
➔ Live CD 版のブートを目指してるのでこちらの対応必須
35