如何在8086微处理器的中断向量表中计算任何给定中断(例如INT22H或INT15H)的物理地址?
答案 0 :(得分:1)
...计算中断向量表中任何给定中断(例如INT22H或INT15H)的物理地址......
int 15h
指令找到远{I}}指针的物理地址。
这是中断向量表中的偏移量,因此从列表{0,4,8,12,...,1016,1020}中提供物理地址(即线性地址)。
由于每个向量长度为4个字节,所需要的只是将中断数乘以4.
call
(*)我喜欢所有表示为DX:AX的线性地址。这就是我使用看似不必要的mov ax,0415h ;AL=Interrupt number, AH=4
mul ah ; -> Product in AX
cwd ;(*) -> Result in DX:AX=[0,1023]
指令的原因。
最终处理cwd
的实际地址
这可以是1MB内存中的任何位置。 (在8086上,没有超过1MB的记忆)
每个4字节向量由一个偏移字后跟一个段字组成。订单很重要。
线性地址的计算方法是将段值乘以16并加上偏移值。
int 15h