diff --git a/arch/X86/X86ATTInstPrinter.c b/arch/X86/X86ATTInstPrinter.c
index 216efb2..37cab47 100644
--- a/arch/X86/X86ATTInstPrinter.c
+++ b/arch/X86/X86ATTInstPrinter.c
@@ -536,6 +536,9 @@ static void printPCRelImm(MCInst *MI, unsigned OpNo, SStream *O)
 			imm = imm & 0xffffffff;
 		}
 
+		if (MI->csh->mode == CS_MODE_16)
+			imm |= (MI->address >> 16) << 16;
+
 		if (imm < 0) {
 			SStream_concat(O, "0x%"PRIx64, imm);
 		} else {
diff --git a/arch/X86/X86IntelInstPrinter.c b/arch/X86/X86IntelInstPrinter.c
index 6167e85..cff9237 100644
--- a/arch/X86/X86IntelInstPrinter.c
+++ b/arch/X86/X86IntelInstPrinter.c
@@ -767,6 +767,9 @@ static void printPCRelImm(MCInst *MI, unsigned OpNo, SStream *O)
 			imm = imm & 0xffffffff;
 		}
 
+		if (MI->csh->mode == CS_MODE_16)
+			imm |= (MI->address >> 16) << 16;
+
 		printImm(MI, O, imm, true);
 
 		if (MI->csh->detail) {
