public static Disassembler getDisassembler(Language language, AddressFactory addrFactory,
			TaskMonitor monitor, DisassemblerMessageListener listener) {
		Class<? extends Disassembler> disassemblerClass = getLanguageSpecificDisassembler(language);
		if (disassemblerClass != null) {
			try {
				Constructor<? extends Disassembler> constructor =
					disassemblerClass.getConstructor(Language.class, AddressFactory.class,
						TaskMonitor.class, DisassemblerMessageListener.class);
				return constructor.newInstance(language, addrFactory, monitor, listener);
			}
			catch (Exception e) {
				throw new RuntimeException("Disassembler instantiation failure " +
					GhidraLanguagePropertyKeys.CUSTOM_DISASSEMBLER_CLASS + " (" +
					disassemblerClass.getName() + "): " +
					language.getLanguageDescription().getLanguageID(), e);
			}
		}
		return new Disassembler(language, addrFactory, monitor, listener);
	}
Get a suitable disassembler instance.
Intended for block pseudo-disassembly use only when the method 
{@link Disassembler#pseudoDisassembleBlock(MemBuffer, RegisterValue, int)}
is used.
NOTE: Executable memory restriction is not provided but should possibly be considered
by any use of the resulting instance.
@param language processor language
@param addrFactory address factory 
@param monitor progress monitor
@param listener object to notify of disassembly messages.
@return a disassembler ready to disassemble
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java