public final void register(InstructionSet is)
	{
		int base;
		Instruction i;

		// destination An
		for(int sz = 0; sz < 2; sz++)
		{
			if(sz == 0)
			{
				// suba word
				base = 0x90c0;
				i = new Instruction() {
					public int execute(int opcode)
					{
						return suba_word(opcode);
					}
					public DisassembledInstruction disassemble(int address, int opcode)
					{
						return disassembleOp(address, opcode, Size.Word);
					}
				};
			}
			else
			{
				// adda long
				base = 0x91c0;
				i = new Instruction() {
					public int execute(int opcode)
					{
						return suba_long(opcode);
					}
					public DisassembledInstruction disassemble(int address, int opcode)
					{
						return disassembleOp(address, opcode, Size.Long);
					}
				};
			}
			for(int reg = 0; reg < 8; reg++)
			{
				for(int ea_mode = 0; ea_mode < 8; ea_mode++)
				{
					for(int ea_reg = 0; ea_reg < 8; ea_reg++)
					{
						if(ea_mode == 7 && ea_reg > 4)
							break;
						is.addInstruction(base + (reg << 9) + (ea_mode << 3) + ea_reg, i);
					}
				}
			}
		}
	}