i tested your tool and result is :
REM GET AND CHECK MEMORY MAP (INT 15h E820 and E801) v1.5 2011-08-16 [SSi]
REM ========================================================================
REM BIOS call to Interrupt 15h AX=E801 returns amount of memory (max 4GB).
REM Interrupt 15h AX=E820 returns a map (base address and length of blocks)
REM DOS needs a contiguous block, it cannot cope with 'holes' in the memory
REM DOS typically uses AX=E801, Windows uses AX=E820
REM So the amount of contiguous memory reported by E801 should match or be
REM less than that reported by E820 - if not then DOS programs which use
REM extended memory may crash.
REM Notes: Columns 3 & 4 are rounded down to nearest 1MB only.
REM Ext Attrib=Extended Attributes (bit 0 set if valid value present)
REM T=Type 1=Free 2=Resvd 3=ACPI 4=NVS 5=Unusable 6=Hole else 'Other'
REM ERRORLEVEL=number of errors - 0 is OK, if not 0 then check output.
REM ========================================================================
REM E801 AX=Extended1 - contiguous KB between 1-16MB, max. 15 MB
SET E801_AX=0
REM E801 BX=Extended2 - contiguous 64KB between 16MB-4GB
SET E801_BX=0
REM E801 CX=Configured1 - contiguous KB between 1-16MB, max. 15 MB
SET E801_CX=0
REM E801 DX=Configured2 - contiguous 64KB between 16MB-4GB
SET E801_DX=0
REM ========================================================================
REM BASE ADDRESS (H) LENGTH (BYTES) BaseAd(MB) Length(MB) Ext Attrib T
REM ================== ================ ========== ========== ========== =
REM B=0000000000000000 L=000000000009E800 0MB 0MB E=00000001 1
REM B=000000000009E800 L=0000000000001800 0MB 0MB E=00000001 2
REM B=00000000000E0000 L=0000000000020000 0MB 0MB E=00000001 2
REM B=0000000000100000 L=00000000ABF50000 1MB 2751MB E=00000001 1
REM B=00000000AC050000 L=000000000043E000 2752MB 4MB E=00000001 2
REM B=00000000AC48E000 L=000000000010E000 2756MB 1MB E=00000001 3
REM B=00000000AC59C000 L=000000000021F000 2757MB 2MB E=00000001 4
REM B=00000000AC7BB000 L=0000000000F60000 2759MB 15MB E=00000001 2
REM B=00000000AD71B000 L=0000000000001000 2775MB 0MB E=00000001 1
REM B=00000000AD71C000 L=0000000000086000 2775MB 0MB E=00000001 4
REM B=00000000AD7A2000 L=000000000043B000 2775MB 4MB E=00000001 1
REM B=00000000ADBDD000 L=0000000000417000 2779MB 4MB E=00000001 2
REM B=00000000ADFF4000 L=000000000000C000 2783MB 0MB E=00000001 1
REM B=0000000100000000 L=0000000750000000 0MB 1280MB E=00000001 1
REM B=00000000E0000000 L=0000000010000000 3584MB 256MB E=00000001 2
REM B=00000000FED1C000 L=0000000000004000 4077MB 0MB E=00000001 2
REM B=00000000FF000000 L=0000000001000000 4080MB 16MB E=00000001 2
SET E801=16
SET E820_TOTAL=32708
SET E820_CONTIG=2752
REM INT 15h E801 ideally should be same as INT 15h E820 = ** POSSIBLE FAIL **
SET RMEMTEST_PARAM=1 15
SET E801_64K_COUNT=256
SET E820_64K_COUNT=44037
SET ERRORLEVEL=1
so it seems not very cool ...
beside that i think that these i7 have a sort of 2x [4x memory controller] , at the physical plan with 2x4 slots of memory , may be the ram is divided in two blocks so getmem/grub4dos should change the memory controller when a block is filled : 512 [or even 256 or 1024] Mo to get a large block of continuous memory .