sory ,, I will posted my code again
import java.util.Scanner; public class RegistorClass { private int accumulator; private int instructionCounter; private int instructionRegister; private int operationCode; private int operand; private boolean halt; private MemoryClass memory;// Operation codes // Input/Output operations. private final int READ = 10; private final int WRITE = 11; // Load/Store operations. private final int LOAD = 20; private final int STORE = 21; // Arithmetic operations. private final int ADD = 30; private final int SUBTRACT = 31; private final int DIVIDE = 32; private final int MULTIPLY = 33; // Transfer-of-control operations. private final int BRANCH = 40; private final int BRANCHNEG = 41; private final int BRANCHZERO = 42; private final int HALT = 43;public RegistorClass(MemoryClass memory1){ accumulator = 0; instructionCounter = 0; instructionRegister = 0; operationCode = 0; operand = 0; halt = false; memory = memory1;} public int getOperationCode(int word) { int operationCode = word / 100; return operationCode; }public int getOperand(int word) { int operand = word % 100; return operand; } public boolean executeNextInstruction() { if (halt) return false; // Read next instruction from memory. instructionRegister = memory.read(instructionCounter); operationCode = getOperationCode(instructionRegister); operand =getOperand(instructionRegister); boolean transferOfControl = false; // execute the instruction. switch (operationCode) { case READ: Scanner scan = new Scanner(System.in); // Read a word from the keyboard. System.out.print("Enter an integer: "); // Write word to memory. memory.write(operand, scan.nextInt()); break; case WRITE: // Read a word from memory. int data = memory.read(operand); // Display the word on the screen if (!halt) System.out.println(data); break; case LOAD: // Load a word from memory into the accumulator. accumulator = memory.read(operand); // accumulator=memory[operand]; break;case STORE: // Store accumulator into memory. memory.write(operand, accumulator); // memory[operand]=accumulator; break; case ADD: // Add word from memory to accumulator. accumulator += memory.read(operand); break; case SUBTRACT: // Subtract word from memory from accumulator. accumulator -= memory.read(operand); break; case DIVIDE: // Divide accumulator by a word loaded from memory. int divisor = memory.read(operand); //divisor=memory[oprand] ; if (!halt) if (divisor == 0) { System.out.println("*** Attempt to divide by zero ***"); } else accumulator /= divisor; break; case MULTIPLY: // Multiply accumulator by a word loaded from memory. accumulator *= memory.read(operand); break; case BRANCH: // Branch to location in memory. instructionCounter = operand; transferOfControl = true; break; case BRANCHNEG: // Branch to location in memory if accumulator is negative. if (accumulator < 0) { instructionCounter = operand; transferOfControl = true; } break;case BRANCHZERO: // Branch to location in memory if accumulator is zero. if (accumulator == 0) { instructionCounter = operand; transferOfControl = true; } break; case HALT: System.out.println("*** Simpletron execution terminated ***"); transferOfControl = true; halt = true; break; default: System.out.println("*** Invalid operation code ***"); halt= true; // break; } if (!transferOfControl) instructionCounter++; return !halt; }public void dump() { System.out.printf(" accumulator\t\t\t%+05d\n", accumulator); System.out.printf("instructionCounter\t\t %02d\n", instructionCounter); System.out.printf("instructionRegister\t\t%+05d\n", instructionRegister); System.out.printf("operationCode \t\t\t %02d\n", operationCode); System.out.printf("operand \t\t\t\t %02d\n", operand); }public static void main(String[] args) { System.out.println("*** Welcome to Simpletron! ***"); System.out.println("*** Please enter your program one instruction ***"); System.out.println("*** (or data word) at a time. I will display ***"); System.out.println("*** the location number and a question mark (?) ***"); System.out.println("*** You then type the word for that location. ***"); System.out.println("*** Type -99999 to stop entering your program. ***"); System.out.println(); MachineClass machine = new MachineClass (); machine.inputProgramToMemory(); machine.executeProgram();} } class MachineClass { private MemoryClass memory1; private RegistorClass registor1 ; public static final int MEMORY_WORD = 100; public MachineClass(){ memory1=new MemoryClass( MEMORY_WORD); registor1=new RegistorClass(memory1);}public void inputProgramToMemory() { Scanner input =new Scanner(System.in); int memoryWord=0;final int END_OF_INPUT = -9999; System.out.printf("%02d ? ", memoryWord);int data = input.nextInt();while(data !=END_OF_INPUT) { memory1.write(memoryWord,data); memoryWord++; System.out.printf("%02d ? ", memoryWord); data = input.nextInt();} System.out.println("*** Program loading completed ***"); System.out.println(); }public void computerDump() { System.out.println(); System.out.println("REGISTERS:"); registor1.dump(); System.out.println(); System.out.println("MEMORY:"); memory1.dump(); } // Execute program public void executeProgram(){ System.out.println("*** Program execution begins ***"); while ( registor1.executeNextInstruction()) ; computerDump(); }} class MemoryClass { private int[] memory; public MemoryClass(int amountOfMemoryWord ){ memory = new int[amountOfMemoryWord]; } // Write a value to memory. public void write(int word, int value) { if (word < 0 || word >= memory.length) { System.out.println("*** Attempt to write to a non-existing memory location ***"); } else memory[word] = value; } public int read(int word) { int value = 0; if (word < 0 || word >= memory.length) { System.out.println("*** Attempt to read from a non-existing memory location ***"); } else value = memory[word]; return value; } public void dump() { System.out.print( " "); for (int i = 0; i < 10; i++) System.out.printf("%5d ", i); System.out.println(); for (int i = 0; i < memory.length; i += 10) { System.out.print(" "+ i+ " "); for (int j = 0; j < 10 && i+j < memory.length; j++) System.out.printf("%+05d ", memory[i + j]); //05>>> to print five digits ??? System.out.println(); } }
Ads