public PseudoInstruction disassemble(Address addr, byte bytes[],
			PseudoDisassemblerContext disassemblerContext) throws InsufficientBytesException,
			UnknownInstructionException, UnknownContextException {

		MemBuffer memBuffer = new ByteMemBufferImpl(addr, bytes, language.isBigEndian());

		// check that address is defined in memory
		try {
			memBuffer.getByte(0);
		}
		catch (Exception e) {
			return null;
		}

		InstructionPrototype prototype = null;
		disassemblerContext.flowStart(addr);
		prototype = language.parse(memBuffer, disassemblerContext, false);

		if (prototype == null) {
			return null;
		}

		PseudoInstruction instr;
		try {
			instr = new PseudoInstruction(program, addr, prototype, memBuffer, disassemblerContext);
		}
		catch (AddressOverflowException e) {
			throw new InsufficientBytesException(
				"failed to build pseudo instruction at " + addr + ": " + e.getMessage());
		}

		return instr;
	}
Disassemble a location in memory with the given set of bytes.
Useful when the address has no actual bytes defined, or you want to use
your own bytes instead of what is in the program at the address.

@param addr address to disassemble
@param bytes bytes to use instead of those currently defined in program
@param disassemblerContext the disassembler context to use.
@return PseudoInstruction.

@throws InsufficientBytesException
@throws UnknownInstructionException
@throws UnknownContextException
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java