!!!# 发表于 2012-8-17 19:47:13

div的溢出问题

mov ax,1000h
mov bh,1
div bh
不是16位除以32位吗?然后结果的商保存在ax中,然后dx中存余数吗??而ax不是能够容纳下1000h吗,又怎么会溢出呢??
然后我再问一个问题,此处的bh是不是当做32位的处理的


lukelqz 发表于 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 存储除法操作的余数
所以,溢出咯

zhangyun2743 发表于 2012-8-17 21:19:03

1000h貌似是16位数吧?

pediyzhi 发表于 2012-8-26 07:21:00

首先要说的是BH是8位(除数),所以被除数应该是16位也就是AX=1000/1 结果是al存放结果的商,ah存放结果的余数,但是AL的最大值是FFh也就是255d 结果为1000肯定是超出了..然后就溢出了.
页: [1]
查看完整版本: div的溢出问题