diff --git a/iniload.asm b/iniload.asm
--- a/iniload.asm
+++ b/iniload.asm
@@ -912,7 +912,7 @@
 	sub ax, word [bp + ldLoadTop]	; = paras to move down
 	jbe short finish_load
 
-	mov cx, word [bp + lsvLoadSeg]
+	mov dx, word [bp + lsvLoadSeg]
 			; => after end of loaded data
 	sub word [bp + lsvLoadSeg], ax
 			; relocate this pointer already
@@ -948,50 +948,51 @@
 	xor di, di	; word [ss:sp+4]:di -> where to relocate to
 	xor si, si	; ds:si = cs:0
 
-			; cx => after end of loaded data
-	sub cx, bx	; length of currently loaded fragment
+			; dx => after end of loaded data
+	sub dx, bx	; length of currently loaded fragment
 	mov bx, 1000h
-	mov ax, cx
+	mov ax, dx
 	cmp ax, bx	; > 64 KiB ?
 	jbe @F
-	mov cx, bx	; first relocate the first 64 KiB
+	mov ax, bx	; first relocate the first 64 KiB
 @@:
-	sub ax, cx	; how much to relocate later
-	shl cx, 1
-	shl cx, 1
-	shl cx, 1	; how much to relocate first,
+	sub dx, ax	; how much to relocate later
+	mov cl, 3
+	shl ax, cl	; how much to relocate first,
 			;  << 3 == convert paragraphs to words
+	xchg cx, ax	; cx = how many words to relocate first
+;	xchg ax, dx	; ax = how many paras to relocate later
 	retf		; jump to relocator
 
 
 		; ds => first chunk of to be relocated data
 		; es => first chunk of relocated data
 		; bx = 1000h (64 KiB >> 4)
-		; ax = number of paragraphs after first chunk (in next chunk)
+		; dx = number of paragraphs after first chunk (in next chunk)
 relocate_to:
 @@:
-	mov dx, es
-	add dx, bx
-	mov es, dx	; next segment
+	mov ax, es
+	add ax, bx
+	mov es, ax	; next segment
 
-	mov dx, ds
-	add dx, bx
-	mov ds, dx	; next segment
+	mov ax, ds
+	add ax, bx
+	mov ds, ax	; next segment
 
-	sub ax, bx	; = how much to relocate after this round
+	sub dx, bx	; = how much to relocate after this round
 	mov cx, 1000h << 3	; in case another full 64 KiB to relocate
 	jae @F		; another full 64 KiB to relocate -->
-	add ax, bx	; restore
+	add dx, bx	; restore
 	mov cl, 3
-	shl ax, cl	; convert paragraphs to words
-	xchg cx, ax	; cx = that many words
-	xor ax, ax	; no more to relocate after this round
+	shl dx, cl	; convert paragraphs to words
+	xchg cx, dx	; cx = that many words
+	xor dx, dx	; no more to relocate after this round
 
 @@:
 	xor si, si
 	xor di, di
 	rep movsw	; relocate next chunk
-	test ax, ax	; another round needed?
+	test dx, dx	; another round needed?
 	jnz @BB		; yes -->
 
 	push ss
