汇编语言

wusi18 2019-07-08 09:59:51
为什么该执行div dl其却把cs和ip的值改变了
...全文
268 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
婉拒达达利亚 2019-07-18
  • 打赏
  • 举报
回复
ax/dl溢出了,除法溢出是0号中断,调用0号中断程序处理,这是跳到0号中断程序去执行溢出处理了,继续执行下去等中断处理程序执行完就好了。
0号中断处理程序默认地址在F000:1060,这个程序如下
F000:1060 ??? [BX+SI]
F000:1062 ADD AX,[BX+SI]
F000:1064 IRET
执行到IRET之后就返回原来的函数了
毛伯星 2019-07-13
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44116024 的回复:
[quote=引用 1 楼 zara的回复:]div dl 是 ax/dl,即 317A/0A,商为 4F2 余 6 ,4F2 放不进 AL 啊,溢出了,即除非异常了。

除法溢出不是应该直接报错嘛
不过他除的的确是溢出了[/quote]
如果说用的是DOSBox,0号中断里面好像是没用溢出报错的,得自己写好像,我记得我是的时候是这样
毛伯星 2019-07-13
  • 打赏
  • 举报
回复
因为出现了除法溢出,首先dx寄存器中有值,所以cpu认为dx和ax联合做除数,而除出来余数为10000h,8086汇编中单个寄存器最大值为ffffh,所以用来装余数的dx寄存器装不下他,就出现了溢出,溢出解决一下就好了
zara 2019-07-09
  • 打赏
  • 举报
回复
直接报错,是由程序的溢出异常处理程序处理并发出的吧,楼主是 t单步执行,就进处理代码了,如果是用 g命令应该会直接提示并终止吧。
wusi18 2019-07-09
  • 打赏
  • 举报
回复
引用 3 楼 zara的回复:
直接报错,是由程序的溢出异常处理程序处理并发出的吧,楼主是 t单步执行,就进处理代码了,如果是用 g命令应该会直接提示并终止吧。
用g也会一样,这个是除法溢出然后会自动执行0号中断程序
wusi18 2019-07-09
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44116024的回复:
[quote=引用 1 楼 zara的回复:]div dl 是 ax/dl,即 317A/0A,商为 4F2 余 6 ,4F2 放不进 AL 啊,溢出了,即除非异常了。
除法溢出不是应该直接报错嘛 不过他除的的确是溢出了[/quote] 我查了一下: 当发生除法溢出是系统会直接执行0号中断程序 就是改变cs和ip去执行0号中断程序的代码
谢,快乐 2019-07-09
  • 打赏
  • 举报
回复
引用 1 楼 zara的回复:
div dl 是 ax/dl,即 317A/0A,商为 4F2 余 6 ,4F2 放不进 AL 啊,溢出了,即除非异常了。
除法溢出不是应该直接报错嘛 不过他除的的确是溢出了
zara 2019-07-08
  • 打赏
  • 举报
回复
div dl 是 ax/dl,即 317A/0A,商为 4F2 余 6 ,4F2 放不进 AL 啊,溢出了,即除非异常了。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧