为了账号安全,请及时绑定邮箱和手机立即绑定

我们什么时候以及为什么要签署extend,并在mul / div中使用cdq?

我们什么时候以及为什么要签署extend,并在mul / div中使用cdq?

Cats萌萌 2020-02-02 15:48:00
我今天进行了测试,我唯一不了解的问题是将双字转换为四字。这让我开始思考,为什么/何时为扩展或除法签名?另外,什么时候使用cdq等说明?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

我总是在汇编中混为一谈,因为我对寄存器感到困惑。我认为股息总是放在eax / ax中,而一个操作数的指令只是div / idiv ebx(或其他寄存器)。这将有效地执行eax / ebx,商在eax中,余数在edx中。我的考试显示,在调用包含71的EAX上的idiv和包含-4的另一个寄存器之前,我们使用了cdq。为什么是这样?我们使用了每个寄存器的全部,我不明白为什么我们需要其中一个成为四字。 

查看完整回答
反对 回复 2020-02-02
?
四季花海

TA贡献1811条经验 获得超5个赞

请阅读答案的第一行和/或英特尔的insn参考手册。 idiv ebxeax = (edx:eax)/ebxeax = (edx:eax)%ebxedx始终是股息的高半部分,而显式操作数始终是除数。没有div/ 形式idiv会忽略edx2和3操作数形式imul仅产生单寄存器结果的方式。

查看完整回答
反对 回复 2020-02-02
  • 3 回答
  • 0 关注
  • 504 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信