汇编 设置中断描述符表

操作的步骤如下:
1、记录中断处理函数的段内偏移
2、获取或指定段选择子
3、对idt表赋值(本操作是对所有的中断都采用同一的函数(MyIntFunc)处理)
注: _idt  中断描述符表的基址
 idt_descr  中断描述符操作的参数

图示如下:63.55.47.39.31.23.15.7.0

|MyIntFunc[2] |MyIntFunc[3] |0x8e |0x00 |0x00 |0x08 |MyIntFunc[1] |MyIntFunc[0] |

 

setup_idt:  
 lea  MyIntFunc,%edx # 将 ignore_int的有效地址(偏移值)值 edx寄存器  
 movl $0x00080000,%eax  # 将指定段选择子 0x0008置入  eax 的高 16位中。  
 movw %dx,%ax  /* 偏移低两字放入ax 对应中断描述符的低两字节(0,1) */ 
 movw $0x8E00,%dx /* 状态字  interrupt gate - dpl=0, present */     
 lea _idt,%edi # _idt是中断描述符表的地址。  
 mov $256,%ecx  
rp_sidt:  
 movl %eax,(%edi)# 将哑中断门描述符存入表中。  
 movl %edx,4(%edi)  
 addl $8,%edi# edi指向表中下一项。  
 dec %ecx  
 jne rp_sidt  
 lidt idt_descr # 加载中断描述符表寄存器值。  
ret

idt_descr: #下面两行是lidt 指令的6 字节操作数:长度,基址。
 .word 256*8-1 # idt contains 256 entries
 long _idt  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言中,中断向量是一个包含中断处理程序地址的格。每个中断都有一个唯一的中断向量,用于标识该中断中断向量是一个由操作系统或硬件设备维护的数据结构,其作用是将中断向量映射到相应的中断处理程序。 在计算机启动时,中断向量被加载到内存中的固定位置。通常,中断向量位于内存地址0处。每个中断向量占用4个字节,其中前2个字节是偏移量,后2个字节是段选择器。偏移量指向中断处理程序的代码段内存地址,段选择器指向代码段所在的段描述符。 计算中断向量中某一中断的偏移量和段选择器的过程如下: 1. 确定中断号(即中断向量)。 2. 将中断号乘以4,得到中断向量在中断向量中的偏移量(每个中断向量占用4个字节)。 3. 用偏移量作为索引,从中断向量中读取4个字节,即中断处理程序的偏移量和段选择器。 4. 将段选择器左移4位,再加上中断处理程序的偏移量,得到中断处理程序的代码段内存地址。 以下是一个示例代码,演示如何计算中断向量中的中断处理程序地址: ``` ORG 0 ; 中断向量 DW INT0 ; 中断向量0 DW INT1 ; 中断向量1 DW INT2 ; 中断向量2 DW INT3 ; 中断向量3 ; 中断处理程序 INT0: ; 处理中断0 INT1: ; 处理中断1 INT2: ; 处理中断2 INT3: ; 处理中断3 ; 计算中断处理程序地址 MOV AX, 0 ; AX = 0 MOV SI, 1 ; SI = 中断号 SHL SI, 2 ; 中断号 * 4 ADD AX, [SI] ; AX = 中断处理程序的偏移量 MOV DS, [SI+2] ; DS = 段选择器 SHL DS, 4 ; DS << 4 ADD AX, DS ; AX = 中断处理程序的代码段内存地址 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值