Untitled

 avatar
unknown
java
10 months ago
2.9 kB
2
Indexable
Instructions.java // Interface
package org.opcode.service;

import org.opcode.model.Register;
import java.util.Map;

public interface Instruction {
    void execute(Map<Character, Register> registerMap);
}

opcodeimpl.java
package org.opcode.service;

import org.opcode.model.Register;
import java.util.Map;

public class SetInstruction implements Instruction {
    private final char register;
    private final int value;

    public SetInstruction(char register, int value) {
        this.register = register;
        this.value = value;
    }

    @Override
    public void execute(Map<Character, Register> registerMap) {
        registerMap.get(register).setValue(value);
    }
}

public class AddInstruction implements Instruction {
    private final char register;
    private final int value;

    public AddInstruction(char register, int value) {
        this.register = register;
        this.value = value;
    }

    @Override
    public void execute(Map<Character, Register> registerMap) {
        Register reg = registerMap.get(register);
        reg.setValue(reg.getValue() + value);
    }
}

public class AdrInstruction implements Instruction {
    private final char dest;
    private final char src;

    public AdrInstruction(char dest, char src) {
        this.dest = dest;
        this.src = src;
    }

    @Override
    public void execute(Map<Character, Register> registerMap) {
        Register regDest = registerMap.get(dest);
        Register regSrc = registerMap.get(src);
        regDest.setValue(regDest.getValue() + regSrc.getValue());
    }
}

public class MovInstruction implements Instruction {
    private final char dest;
    private final char src;

    public MovInstruction(char dest, char src) {
        this.dest = dest;
        this.src = src;
    }

    @Override
    public void execute(Map<Character, Register> registerMap) {
        Register regSrc = registerMap.get(src);
        registerMap.get(dest).setValue(regSrc.getValue());
    }
}

public class InrInstruction implements Instruction {
    private final char register;

    public InrInstruction(char register) {
        this.register = register;
    }

    @Override
    public void execute(Map<Character, Register> registerMap) {
        Register reg = registerMap.get(register);
        reg.setValue(reg.getValue() + 1);
    }
}

public class DcrInstruction implements Instruction {
    private final char register;

    public DcrInstruction(char register) {
        this.register = register;
    }

    @Override
    public void execute(Map<Character, Register> registerMap) {
        Register reg = registerMap.get(register);
        reg.setValue(reg.getValue() - 1);
    }
}

public class RstInstruction implements Instruction {
    @Override
    public void execute(Map<Character, Register> registerMap) {
        for (Register register : registerMap.values()) {
            register.setValue(0);
        }
    }
}
Editor is loading...
Leave a Comment