]> Devi Nivas Git - cs3210-lab1.git/commitdiff
Fix off-by-one error in the record count returned by do_e820
authorRohan Bafna <rbafna3@gatech.edu>
Tue, 26 Aug 2025 21:29:16 +0000 (17:29 -0400)
committerRohan Bafna <rbafna3@gatech.edu>
Tue, 26 Aug 2025 21:40:29 +0000 (17:40 -0400)
%ebx is set to 0 when the last e820 record is returned, which means
that %bp was not incremented for the last record; this change moves
the increment of %bp to earlier in the function, before %ebx is
tested, and after the magic number returned by e820 is checked, so
that %bp is incremented once for every entry.

Also move the test for %ecx=0 (meaning the entry should be skipped)
for correctness.  It doesn't look like qemu ever actually sets %ecx to
0 in practice though.

bootblock/e820.S

index 68f19f9b12b5922d2b895de0f5b9f87d4a5319a9..24dca78620b668209d60d54deefa5c4cbb87090a 100644 (file)
@@ -53,11 +53,11 @@ do_e820:
 
   cmp %edx, %eax
   jne .e820f
+  jcxz .skipent
+  inc %bp
   test %ebx, %ebx
   je .e820f
-  jcxz .skipent
   cmp $20, %cl
-  inc %bp              
   add $24, %di
 .skipent:
   test %ebx, %ebx