高工在线首页   免费注册 |  登录 
       

高工在线首页 高工论坛 工程软件 32位除法到底该怎么做?

楼主:cnzdgs
32位除法到底该怎么做?
如果是80386以上CPU,可以用32位操作:
mov eax, 99999
mov ecx, 77777
cdq
div ecx

如果汇编器不支持386指令集,可以这样写:
db 66h
mov ax, 被除数低16位
dw 被除数高16位
db 66h
mov cx, 除数低16位
dw 除数高16位
db 66h
cwd
db 66h
div cx

相关热贴:

 

2008-08-20 00:02:30

  顶部
2楼:cnzdgs
商在eax里面,余数在edx里面。

2008-08-20 00:03:10

  顶部
3楼:dacaiying
噢。。 谢谢
能不能给解释下啊

cdq 把eax 的字扩展到 edx 中, 是把 ax 扩展成 32位的吗?

为什么非要用 cdq , div 才能执行成功不产生溢出错误呢?

还有cdq 扩展到 edx 中, 这有什么用处? div 后余数还放在 edx 中,那步 cdq 到底起什么作用呢?

难道 ax 就是余数?。。。。。。。。

2008-08-20 00:24:27

  顶部
4楼:dacaiying
还有 cdq 是不是能用 shr 代替呢?

2008-08-20 00:26:42

  顶部
5楼:cnzdgs
字寄存器前面加字母e表示扩展到32位寄存器,例如eax是32位的,其中低16位是ax。
cdq是把eax扩展到edx中,形成64位的寄存器对,因为被除数需要是除数位数的两倍。
cdq在这里可以用xor edx,edx来代替,但不能用shr代替。

2008-08-20 00:40:54

  顶部
6楼:dacaiying
啊? cdq 可以把 eax 和 edx 扩展成一个64 位的寄存器,那这样来说 高32位在edx,低32位在 eax中了
然后div 就把edx,eax当成了一个64位寄存器操作?

cdp 。。。 xor 又让我晕了, ls高手的意思是不是说, div 固定把 edx 和 eax 视为 64位寄存器
当 edx 为 0 时视为联合调用寄存器?否则当 !edx 时, div 认为只单独用eax ?

2008-08-20 00:52:34

  顶部
 
 
1
1/1页
标 题:
内 容:
验证码:     看不清?换一个 *
用户名: 匿名  提示:匿名发表将不享受高工在线论坛提供的积分奖励。
    

关于高工在线 | 广告服务| 使用条款 | 网站提交 | 推荐给好友 | 友情链接
© 2008 Gaogong123.com 高工在线-工程搜索引擎,保留所有权利