summaryrefslogtreecommitdiff
path: root/ldlinux.asm
diff options
context:
space:
mode:
Diffstat (limited to 'ldlinux.asm')
-rw-r--r--ldlinux.asm10
1 files changed, 6 insertions, 4 deletions
diff --git a/ldlinux.asm b/ldlinux.asm
index 77e3e982..baa7cca3 100644
--- a/ldlinux.asm
+++ b/ldlinux.asm
@@ -1208,6 +1208,7 @@ getfssec_edx:
push eax
.getfragment:
xor ebp,ebp ; Fragment sector count
+ push edx ; Starting sector pointer
.getseccnt:
inc bp
dec cx
@@ -1215,19 +1216,20 @@ getfssec_edx:
xor eax,eax
mov ax,es
shl ax,4
- add ax,bx ; Now DI = how far into 64K block we are
+ add ax,bx ; Now AX = how far into 64K block we are
not ax ; Bytes left in 64K block
inc eax
shr eax,SECTOR_SHIFT ; Sectors left in 64K block
cmp bp,ax
jnb .do_read ; Unless there is at least 1 more sector room...
- lea eax,[edx+1] ; Linearly next sector
+ mov eax,edx ; Current sector
+ inc edx ; Predict it's the linearly next sector
call nextsector
jc .do_read
- cmp edx,eax
+ cmp edx,eax ; Did it match?
jz .getseccnt
.do_read:
- mov eax,edx
+ pop eax ; Starting sector pointer
call getlinsecsr
lea eax,[eax+ebp-1] ; This is the last sector actually read
shl bp,9