@Override
			public void run(TaskMonitor monitor) {
				int numInstructions = searchData.getInstructions().size();

				monitor.setMaximum(numInstructions);

				// Get the search strings for all instructions.
				String valueStr = searchData.getValueString();
				String maskStr = searchData.getMaskString();

				// Keep a count of where we are in terms of bytes as we're processing each
				// instruction.
				int posptr = 0;

				// Loop over all instructions, extracting information for each, and 
				// converting the binary instruction to a string we can display.
				for (int i = 0; i < numInstructions; i++) {

					if (monitor.isCancelled()) {
						return;
					}

					monitor.incrementProgress(1);

					// Keep track of the instruction size as we're processing; we use this to 
					// increment our byte position.
					int instrSize = 0;

					InstructionMetadata metadata = searchData.getInstructions().get(i);
					if (metadata != null) {

						// See if we only have a mnemonic and NO operands.  If so, then just add
						// the mnemonic to the preview panel and increment our counter.
						if (metadata.getOperands() == null || metadata.getOperands().size() == 0) {
							MaskContainer maskContainer = metadata.getMaskContainer();
							if (maskContainer != null && maskContainer.getValue() != null) {
								instrSize = maskContainer.getValue().length;
							}
						}
						else if (metadata.getOperands() != null) {

							OperandMetadata operand = metadata.getOperands().get(0);

							// We should never have a null operand here, but if we do, we need to
							// break out of this and continue to the next item, without incrementing
							// our pointer (because we didn't process anything).
							if (operand == null) {
								continue;
							}

							instrSize = operand.getMaskContainer().getValue().length;
						}
					}

					// Finally build the preview string for this instruction, and increment our
					// byte position.
					buildPreviewString(instrSize, valueStr, maskStr, posptr, i);
					posptr += instrSize * 8;
				}
			}
Constructs the preview strings to display in the table, based on the
current mask settings.
<p>
This is a potentially long-running task so it's implemented in a
background task. Also, note that we need to specify the dialog parent so
we can't use the convenience TaskLauncher.launch... methods.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/PreviewTable.java