public boolean step() {
		if (!assembler.execute(pc)) {
			if (NOPcount == 0) {
				done = true;
				NOPcount++;
			} else if (NOPcount == 6) {
				return false;
			} else {
				NOPcount++;
			}
		}

		registerFile.execute();
		controller.execute();
		alu.execute();
		dataMemory.execute();

		assembler.write();
		registerFile.write();
		controller.write();
		alu.write();
		dataMemory.write();
		cycles++;
		gui.update();
		
		
		if(!done){
			pc += 4;
		}
		
		if(executeMemoryRegisters.isBranch() && executeMemoryRegisters.isZero()){
			pc = executeMemoryRegisters.getBranchAddress();
			NOPcount = 0;
			done = false;
		}
		
		if(executeMemoryRegisters.isJump()){
			
			pc = executeMemoryRegisters.getJumpAddress();
			NOPcount = 0;
			done = false;
		}
		gui.update();
		return true;
	}