Как работает указатель на дополнительный сегмент в сборке 8086?

#assembly #x86-16 #masm

#сборка #x86-16 #masm

Вопрос:

У меня возникла проблема с пониманием этой части кода:

 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 
  

Я знаю, что инструкции MOV WORD PTR ES:[8], OFFSET NMI_ISR и MOV WORD PTR ES:[10], SEG NMI_ISR имеют какое-либо отношение к указанию на функцию NMI_ISR в другом сегменте кода, чего я не понимаю, так это зачем использовать дополнительный сегмент для этого? Какова цель ES:[8] и ES:[10] .

Заранее спасибо!

Комментарии:

1. Вероятно es , загружается с нулевым базовым значением для доступа к таблице векторов прерываний. Два слова со смещением 8 в IVT (равным линейному адресу 00008h) являются смещением и сегментом обработчика NMI (прерывание 2).

2. Спасибо Tnx за вашу помощь..

3.Да, часть кода, который вы вырезали и заменили на ... was MOV AX, DSEG MOV DS, AX MOV AX, 0 MOV ES, AX DS, имеет значение DSEG, а ES имеет значение ноль для доступа к таблице векторов прерываний в базе памяти, начиная с 0x0000: 0x0000

4. Есть ли другой способ доступа или инициализации векторной таблицы?

5. Да, это так, и намного лучше: программное обеспечение DOS прерывает 0x21 с AH = 0x25: ctyme.com/intr/rb-2602.htm