Code: Select all
xor ebx, ebx
mov ecx, 20
mov es, bx
mov di, 500h
jmp byte .next
.zero: xor edx, edx
jmp byte .save
.next: mov edx, "PAMS"
mov eax, 0E820h
int 15h
jc byte .error_E820
sub eax, "PAMS"
jnz byte .error_E820
cmp ecx, 20
jne byte .error_E820
cmp [di+ARDESC.Type], 1
jne byte .continue
mov ebp, [di+ARDESC.BaseAddrLow]
cmp ebp, 100000h
jb byte .continue
cmp eax, [di+ARDESC.BaseAddrHigh]
jne byte .continue
mov edx, ebp
add ebp, 0FFFh
jc byte .continue
and ebp, 0FFFFF000h
add edx, [di+ARDESC.LengthLow]
jc byte .zero
cmp eax, [di+ARDESC.LengthHigh]
jne byte .zero
and edx, 0FFFFF000h
cmp ebp, edx
jae byte .continue
.save: push edx
push ebp
dec [block_counter]
jz byte .break
.continue: and ebx, ebx
jnz byte .next
.break: