title: How does pointer to Extra Segment works in 8086 assembly?
body: <p>I am having a problem of understanding this part of the code:</p>
  <pre><code>CSEG_B SEGMENT AT FF100h
   ASSUME CS: CSEG_B, DS: DSEG  
  ...
     MOV WORD PTR ES:[8], OFFSET NMI_ISR   
     MOV WORD PTR ES:[10], SEG NMI_ISR
  ...
  CSEG_B ENDS 
  
  CSEG_C SEGMENT 'CODE'
   ASSUME CS: CSEG_C 
  
    NMI_ISR PROC FAR
    ...
    NMI_ISR ENDP 
  CSEG_C ENDS 
  </code></pre>
  <p>I know that the instructions <code>MOV WORD PTR ES:[8], OFFSET NMI_ISR</code> and <code>MOV WORD PTR ES:[10], SEG NMI_ISR</code> have anything to do with pointing to the function <code>NMI_ISR</code> in the other code segment, what I don't understand is why use extra segment for this? What is the purpose of the <code>ES:[8]</code> and <code>ES:[10]</code>.</p>
  <p>Thanks in advance!</p>