title: Can't get 16 bit assembly program to jump to 0x1000:0x0000
body: <p>I know I succeed in writing my code to that address using <code>int 13h</code> because I can see it at that memory location. What I can't do is jump there. </p>
  
  <p>I put <code>0x1000</code> (three zeros there) into <code>es</code> and <code>0x0000</code> into <code>bx</code> and I know that <code>[es:bx]</code> means the address calculated by <code>(es * 0x10) + bx</code> which does equal <code>0x10000</code> (four zeros there). But <code>eip</code>, the instruction pointer, never does go there. </p>
  
  <p>I've tried <code>jmp [es:bx]</code>, <code>jmp 0x1000:0x0000</code>, and a bunch of other permutations that <code>NASM</code> doesn't even accept.</p>
  
  <p>My boot loader as it currently is (which still isn't working) is <a href="https://docs.google.com/document/d/1J2vNReGoeXz7PoBzYHg3bwNpXeeOKkSmS3rmmd_yxmY/edit" rel="nofollow">here</a>. I booted it up in Qemu and did a memsave on the first 50 bytes at <code>0x10000</code>, opened it up with tweak, and saw my "kernel" code there (simple . But <code>EIP</code> still refuses to be <code>0x10000</code>, or reach it and then hang where I want it, is what I mean). Full images of the situation <a href="https://docs.google.com/document/d/1pjeP_NXKeuZQb8zmeLaMlWyh5YqWD34jZIQcxBBzPf0/edit" rel="nofollow">here</a></p>