title: Are addresses in x86 assembly virtual or physical?
body: <p>Suppose we have some x86 instruction like</p>
  
  <p><code>mov eax, [ebx]</code></p>
  
  <p>and the value of <code>[ebx]</code> is some address <code>0x123456789</code>.</p>
  
  <p>Does this address <code>0x123456789</code> refer to a virtual or physical address?</p>
  
  <p>If virtual, will this be in the <em>process</em> virtual address space of the executing process, or the <em>kernel</em> virtual address space?</p>
  
  <p>Reading <a href="https://www.akkadia.org/drepper/cpumemory.pdf" rel="noreferrer">What Every Programmer Should Know About Memory</a>, it states that "A virtual address space is implemented by the Memory
  Management Unit (MMU) of the CPU".</p>
  
  <p>So is there a CPU virtual address space independent of the operating system? Why would this be needed in addition to the kernel virtual address space? How would the CPU even perform a virtual to physical translation without an operating system?</p>