| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 957 人关注过本帖
标题:关于DIV溢出
取消只看楼主 加入收藏
xiaojihua20
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-11
结帖率:0
收藏
已结贴  问题点数:10 回复次数:1 
关于DIV溢出
CPU是如何得知DIV中断的,中断时会对PSW寄存器状态有影响吗?
以下是我写的一个DIV中断安装程序

assume cs:code
code segment

  start: mov ax,cs
         mov ds,ax
         mov si,offset r0
         
         mov ax,0
         mov es,ax
         mov di,0200H
         
         mov cx,offset r0_end - offset r0
         cld
         rep movsb
         
         mov ax,0
         mov es,ax
         mov word ptr es:[0],0200H
         mov word ptr es:[2],0
         
         mov ax,4c00H
         int 21H
         
     r0: jmp short r0_st
         db "divide error!"
         db 0
         
  r0_st: mov ax,cs
         mov ds,ax
         mov si,0202H
         mov ax,0B800H
         mov es,ax
         mov di,12*160+36*2
         
   show: mov cl,[si]
         mov ch,00H
         jcxz show_en
         mov es:[di],cx
         inc di
         mov cx,01000010B
         mov es:[di],cx
         inc di
         inc si
         jmp short show
         
show_en: iret

 r0_end: nop
 
 code ends
 end start

我把此中断程序放在0000:0200处,如果产生DIV中断,则会执行此中断程序,程序执行完后用 iret 返回。
但是实际情况却是一直在执行此中断程序,无法结束。我认为用 iret 时已经返回了调用些中断的程序,但是返回后又执行了此中断程序,所以此中断程序会一直执行下去。对此很不解,请高手指点。谢谢!
搜索更多相关主题的帖子: DIV 
2010-07-13 08:20
xiaojihua20
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-11
收藏
得分:0 
回复 2楼 东海一鱼
是的,前1024B是放中断向量表的,但是这1024B不会被用完,0200H-0300H是空闲的。所以只是我试着把新的中断程序放在那里,这并不是问题的重点。
2010-07-13 18:09
快速回复:关于DIV溢出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023768 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved