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

我今天进行了测试,我唯一不了解的问题是将双字转换为四字。

这让我开始思考,为什么/何时为扩展或除法签名?另外,什么时候使用cdq等说明?


Cats萌萌
浏览 511回答 3
3回答

摇曳的蔷薇

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

四季花海

请阅读答案的第一行和/或英特尔的insn参考手册。 idiv ebx做eax = (edx:eax)/ebx和eax = (edx:eax)%ebx。edx始终是股息的高半部分,而显式操作数始终是除数。没有div/ 形式idiv会忽略edx2和3操作数形式imul仅产生单寄存器结果的方式。
打开App,查看更多内容
随时随地看视频慕课网APP