public void step() {
		if (!prg.isHalted()) {
			try {
				prg.execute(pro);
			} catch (CodeAccessException e) {
				String msg;
				
				if (pro.getProgramCounter() < 0 || pro.getProgramCounter() >= Program.MEMORY_MAX_SIZE) {
					JOptionPane.showMessageDialog(null, "Error! Line "+ pro.getProgramCounter() + " "+
							"\n"+"Code Access Exception: " + e.getMessage());//Memory address out of bound
					System.out.println("Error! Line "+ pro.getProgramCounter() + " "+
							"\n"+"Code Access Exception: " + e.getMessage());
					System.exit(0);
				} else {
					CodeLine curCode = prg.getLines()[pro.getProgramCounter()];
					msg = PippinMachine.insNam.get(curCode.getInstr()) + " ";
					if (curCode.isIndirect()) msg += "%";
					msg = msg + curCode.getArg();

					JOptionPane.showMessageDialog(null, "Error! Line "+ pro.getProgramCounter() + " "+
							msg+"\n"+"Code Access Exception: " + e.getMessage());//Memory address out of bound
					System.out.println("Error! Line "+ pro.getProgramCounter() + " "+
							msg+"\n"+"Code Access Exception: " + e.getMessage());
					System.exit(0);
				}
			} catch (DataAccessException e) {
				CodeLine curCode = prg.getLines()[pro.getProgramCounter()];
				String msg = PippinMachine.insNam.get(curCode.getInstr()) + " ";
				if (curCode.isIndirect()) msg += "%";
				msg = msg + curCode.getArg();


				JOptionPane.showMessageDialog(null, "Error! Line "+ pro.getProgramCounter() + " "+
						msg+"\n"+"Data Access Exception: " + e.getMessage());
				System.out.println("Error! Line "+ pro.getProgramCounter() + " "+
						msg+"\n"+"Data Access Exception: " + e.getMessage());
				System.exit(0);
			} catch (DivideZeroException e) {
				CodeLine curCode = prg.getLines()[pro.getProgramCounter()];
				String msg = PippinMachine.insNam.get(curCode.getInstr()) + " ";
				if (curCode.isIndirect()) msg += "%";
				msg = msg + curCode.getArg();

				JOptionPane.showMessageDialog(null, "Error! Line "+ pro.getProgramCounter() + " "+
						msg+"\n"+"Divided by Zero!");
				System.out.println("Error! Line "+ pro.getProgramCounter() + " "+
						msg+"\n"+"Divided by Zero!");
				System.exit(0);
			}
			System.out.println("The accumulator is: " + pro.getAccumulator());
			System.out.println("The program counter value is: " + pro.getProgramCounter());
			prg.printMemory();
			System.out.println();
		}
		setChanged();
		notifyObservers();
	}