I am trying to determine how to read physical memory.  I understand that when the OS is in protected mode a process can only access the virtual memory assigned to it without resulting in a segmentation fault.  Is it possible to read physical memory using assembly language running in real mode?  I'm assuming that using assembly language would be the most effective method rather than using a higher-level language such as C.  My goal is to create a program which can scan physical memory to be used for memory forensic applications.  I am running a Windows OS using MASM.
Reading Physical Memory
assembly;memory