通过中断类型码求中断入口地址

目录

中断向量表

如何解题

例题(完整的题直接练练吧)

1:

2:

3:

4:

5:混合一点


中断向量表

存放中断地址的一段内存空间称为中断向量表

存放各类中断的中断服务程序的入口地址

表的地址位于内存的0000:0000到0000:03FFH(即0段的0000到03FFH) 大小1KB,共256个入口

每个入口占用4个单元,一次为CS:IP  ,低字节为段内偏移地址,高字节为段基址

中断类型码 乘 4=中断向量表对应地址

如何解题

这种题其实很简单。不是×4就是除4,分清楚就行了

题目要求一般为给你中断类型码,一段向量表中的存储情况,问你中断服务程序的真正入口地址

假设中断类型码16H,求中断程序入口地址?    

16H 是         0001 0110             给他左移2位就是乘4

                            0101 1000         (58H)

然后去    58H,59H,5AH,5BH中取数据 

 

假设它们中的数据分别是

       58H 里面的内容是   11H

       59 H里面的内容是   22H

       5AH  里面的内容是  33H

       5BH 里面的内容是   44H 

 中断类型码*4+0 是 ip低8

 中断类型码*4+1 是 ip高8

 中断类型码*4+2 是 cs低8

 中断类型码*4+ 3是 cs高8

然后进行拼接

CS:IP

4433:2211H  就是中断入口地址

IP 低8
IP 高8
CS 低8
CS 高8

             一样遵循高高低低原则,低地址放低位高地址放低位

例题(完整的题直接练练吧)

1:

80x86系统采用8259A的中断类型码为88H,试问:

这个中断源的中断请求信号应连向8259A的那个中断输入端?

中断服务程序的段地址和偏移地址应该分别装入哪两个字单元

第一问:

把88H展开   1000 1000   由ICW2,可以知道高五位是咱们自己设置的,低三位是根据连接在IR线,系统设置的。那么就可以知道这个中断段的中断请求连向8259A的IR0

第二问:

中断向量码*4=中断服务程序入口地址

1000 1000  左移两位就是×4,末尾补两个0

10 0010 0000

220H  首地址就是220H

中断服务程序的偏移地址和段地址分别填入4n和4n+2两个字单元

 220H 221H   222H  223H

因为是0段,所以偏移地址就等于物理地址(可以这么记, 0000H*16那不还是0吗)

段地址填入  00222H,和00223两个字节单元

偏移地址填入00220H ,和00221H两个单元

2:

 8086微机系统的RAM存储单元中,从0000H:002CH开始一次存放23H,0FFH,00H,0F0H四个字节,该向量对应的中断号是(0BH),中断程序的物理地址是(0FFF23H)

解:

中断类型号=中断服务程序入口地址除4

2CH 展开

 0010 1100   除以4,右移2位

 0000 1011 (0BH)

如果在问你中断服务程序的物理地址是多少?

0F000H:0FF23H

物理地址=段*16+偏移

左移1位

  0F0000H

+  0FF23H

   0FFF23H(物理地址)       

  

3:

在微机系统中,CPU 对中断源的管理可采用中断向量方式。设某中断向量在中断向量表中 0000H:0018H 单元开始按地址递增方向依次存放 95H、96H、97H 和 98H,99H,9AH,9BH和9CH 八个字节,请回答: 该向量对应的中断类型码和中断服务程序的入口地址的 CS 和IP 分别是多少? 并简述所得结论的理由。

解题:

0018H

0000 0000 0001  1000    除4右移2位

0000 0000 0000  0110 (06H)

中断向量码06H

CS 的值为  9897H  

IP  的值为  9696H

理由:中断向量表共1024个字节,每一级中断占用4个字节。前两个字节是中断子程序的偏移地址,后两个字节是中断子程序的段地址。按顺序存放在0段的0偏移-----0段的03FF偏移。

 

4:

在 PC 机中5 号中断,它的中断向量地址是()
A. 0000H: 0005H    B:0000H: 0010H
C.0000H:0014H       D.0000H: 0020H

解题:

 0000  0101 (5)乘4左移两位

 0001 0100(14H)

5:混合一点

(1)CS=?   IP=?  SP=?  PSW=?  (注意本题没有中断返回指令IRET,只是中断响应的过程)

 INT 7   双字指令 那么 IP的值需要+2  ip=0282H (IP始终指向下一条指令的偏移地址)

进入中断程序的响应,首先把 PSW(Flags )压栈, 保护现场。

 SP指针= 1800H-2 =17FEH   

 关中断,关单步  IF=TF=0

PSW每位的状态你需要知道。1,3,5位没有有,从第11位开始,依次位oditszapc

可以知道IF和TF依次在 第九位,和第八位

原来的字为  0000 0010 0100 0001(0241H)TF已经是0了把IF置0即可

 PSW=      0000 0000 0100 0001 (0041H) 别的位不用管

          

 然后保护断点,把CS:IP 依次压入堆栈保护

 SP指针=17FE-4=17FAH

中断类型码 7, 通过7*4算出中断服务  程序的入口地址    

 0000 0111 (7) 左移2位

 0001 1100 (1CH)。 此处为偏移地址,

知道中断向量表的地址为0000:0000H- 0000:03FFH

物理地址  =段*16+ip= 00000H+1CH=0001CH.

所以IP= 2010H  CS=4030H  (高高低低原则)

(2) 此时堆栈中的情况

 1:17FAH 

 2:17FFH  其余的内容对应填上即可

  • 50
    点赞
  • 184
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值