@Override
	public Address subtract(Address addr, long displacement) {

		if (displacement < 0) {
			return add(addr, -displacement);
		}

		testAddressSpace(addr);
		if (displacement > spaceSize) {
			throw new AddressOutOfBoundsException(
				"Address Overflow in subtract: " + addr + " + " + displacement);
		}
		long off = addr.getOffset() - displacement;
		if (off >= 0) {
			SegmentedAddress saddr = (SegmentedAddress) addr;
			Address resaddr = getAddressInSegment(off, saddr.getSegment());
			if (resaddr == null) {	// Could not map into desired segment
				resaddr = new SegmentedAddress(this, off);	// just use default
			}
			return resaddr;
		}
		throw new AddressOutOfBoundsException(
			"Address Overflow in subtract: " + addr + " + " + displacement);
	}
@see ghidra.program.model.address.AddressSpace#subtract(ghidra.program.model.address.Address,
     long)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/SegmentedAddressSpace.java