unicn 发表于 2014-3-19 12:21:51

非常非常需要帮助解答,谢谢大神。

这是 汇编语言 王爽 第二版 第200页下面的一个例子 我想不明白 16位乘法,第一次执行 mul bx 的时候 结果 高位 放在 dx,低位 低位 放在 ax 中,可是第二次执行 mul bx 的时候 还是 执行的 ax*bx 结果 还是高位 放在 dx 中,低位 放在 ax 中,那么第一次放进 dx 进去 的第一次相乘的高位 怎么处理的呢,我想不明白,请大神帮忙解答,下面是我 随意编写的 一个小验证程序,还有 debug 的结果,都显示这么写不正确。请大神帮忙鉴定下,谢谢。
这是实际结果




luckin 发表于 2014-3-19 16:26:13

EFFF*EFFF=E0FE2001

EFFF*2001=1E00CFFF

mul bx 应该就是bx*ax

小甲鱼 发表于 2014-3-20 10:53:24

正如你所调试的那样:

第一次执行mul bx:EFFFH * EFFFH = E0FE2001H,AX存放低位2001H,DX存放高位E0EFH

第二次执行mul bx:2001H * EFFFH = 1E00CFFFH,AX存放低位CFFFH,DX存放高位1E00H

第一次的存放的将诶过会被第二次所覆盖。

unicn 发表于 2014-3-20 11:06:26

小甲鱼 发表于 2014-3-20 10:53
正如你所调试的那样:

第一次执行mul bx:EFFFH * EFFFH = E0FE2001H,AX存放低位2001H,DX存放高位E0EF ...

谢谢小甲鱼老师。

unicn 发表于 2014-3-20 11:07:34

luckin 发表于 2014-3-19 16:26
EFFF*EFFF=E0FE2001

EFFF*2001=1E00CFFF


谢谢这位大神。
页: [1]
查看完整版本: 非常非常需要帮助解答,谢谢大神。