鱼C论坛

 找回密码
 立即注册
查看: 2556|回复: 3

div的溢出问题

[复制链接]
发表于 2012-8-17 19:47:13 | 显示全部楼层 |阅读模式
4鱼币
mov ax,1000h
mov bh,1
div bh
不是16位除以32位吗?然后结果的商保存在ax中,然后dx中存余数吗??而ax不是能够容纳下1000h吗,又怎么会溢出呢??
然后我再问一个问题,此处的bh是不是当做32位的处理的


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-17 20:53:11 | 显示全部楼层
本帖最后由 lukelqz 于 2012-8-17 21:26 编辑

bh是16位寄存器当然不会当做32位处理。你使用div bh,那么默认被除数就是在ax中,而不是在dx和ax中,除非你的除数是32位的寄存器或者内存单元。
引用王爽老师的汇编语言。
被除数: 默认放在 ax 或 dx 和 ax 中, 如果除数为 8 位, 被除数则为 16 位, 默认在 ax 中存放; 如果除数为 16 位, 被除数则为 32 位, 在 dx 和 ax 中存放, dx 存放高 16 位, ax 存放低 16 位.   结果: 如果除数为 8 位, 则 al 存储除法操作的商, ah 存储除法操作的余数; 如果除数为 16 位, 则 ax 存储除法操作的商, dx 存储除法操作的余数.

如果除数为 8 位, 则 al 存储除法操作的商,al容不下1000h哦, ah 存储除法操作的余数
所以,溢出咯
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-17 21:19:03 | 显示全部楼层
1000h貌似是16位数吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-26 07:21:00 | 显示全部楼层
首先要说的是BH是8位(除数),所以被除数应该是16位也就是AX=1000/1 结果是al存放结果的商,ah存放结果的余数,但是AL的最大值是FFh也就是255d 结果为1000肯定是超出了..然后就溢出了.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-3 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表