anchor.diff:    if PInst^.ModRm.Value.IsMem then
     begin
       DecodeArgAsMem(PInst, PInst^.Arg1);
  -  end
  -  else
  -  begin
  +  end else begin
       PInst^.Arg1.Reg := (REGS_GP or (PInst^.InternalData.OpSizeV shl 8) or PInst^.ModRm.Value.Rm or PInst^.Fields.B);
     end;
  -
  +  DS := SegOrDef(PInst, SEG_DS);
     if Assigned(PInst^.VirtualAddr) then
       VA := PInst^.VirtualAddr + (PInst^.NextInst - PInst^.Addr)
     else
  
positive.code: end;
  
  procedure DecodeBranch_Ev(PInst: PInstruction);
  var
    VA, P: PByte;
    F: Word;
  begin
    F := PInst^.DstAddr.Flags or JF_USED or JF_ABSOLUTE or JF_INDIRECT or JF_NEAR;
    DecodeModRm(PInst);
  
negative.code: 
        end;
        P := VA + Int32(PInst^.Disp.Value);
        if DS = SEG_DS then
        begin
          try
            { Since UnivDisasm can disassemble from anywere (memory,disk,..)
              User may provide wrong address !!
              ==> So we must use try to access memory !!!
            }
            P := PByte(PUInt64(P)^);
          except
            P := nil;
            PInst^.Error(ERROR_INVALID_EFFECTIVE_ADDRESS);
          end;
          PInst^.DstAddr.Addr := P;
        end;
      end else begin
        { No EIP/RIP }
        if DS = SEG_DS then
        begin
          P := PByte(PInst^.Disp.Value);
          try
            case PInst^.AddressMode of
              AM_16: P := PByte(PUInt16(P)^);
              AM_32: P := PByte(PUInt32(P)^);
            else PInst^.Error(ERROR_INVALID_ADDRESS_MODE);
            end;
          except
            P := nil;
            PInst^.Error(ERROR_INVALID_EFFECTIVE_ADDRESS);
          end;
          PInst^.DstAddr.Addr := P;
        end;
      end;
    end else begin
      { JMP/CALL [REG] }
      F := F or JF_REG;
      PInst^.DstAddr.Addr := nil;
  