public void FindLabel(String label, int reference_address) {
		if (DEBUG_WRITE_LABEL) {
			trace("<<<< write address: " + reference_address + " , value: " + 0);
		}
		WriteIntByAddress(reference_address, 0);
		for (Label lp : labels) {
			if (lp.label.equals(label)) {
				if (lp.ref != null) {
					lp.ref = new LabelRef(lp.ref, reference_address);
					if (DEBUG_REF_VALUE) {
						trace("===>new LabelRef:" + "\t" + 
								lp.label + "\t" + 
								lp.jmp_addr);
					}
				} else {				
					if (DEBUG_WRITE_LABEL) {
						trace("<<<< write address: " + reference_address + 
								", value: " + lp.jmp_addr + "\t" + lp.label);
					}
					WriteIntByAddress(reference_address, lp.jmp_addr);
				}
				return;
			}
		}
		LabelRef chain = new LabelRef(null, reference_address);
		labels.add(new Label(label, reader.GetLineNo(), 0, chain));
		if (DEBUG_REF_VALUE) {
			trace("===>new Label:" + label + "\t" + reader.GetLineNo());
		}
	}