我今天进行了测试,我唯一不了解的问题是将双字转换为四字。这让我开始思考,为什么/何时为扩展或除法签名?另外,什么时候使用cdq等说明?
3 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
我总是在汇编中混为一谈,因为我对寄存器感到困惑。我认为股息总是放在eax / ax中,而一个操作数的指令只是div / idiv ebx(或其他寄存器)。这将有效地执行eax / ebx,商在eax中,余数在edx中。我的考试显示,在调用包含71的EAX上的idiv和包含-4的另一个寄存器之前,我们使用了cdq。为什么是这样?我们使用了每个寄存器的全部,我不明白为什么我们需要其中一个成为四字。
四季花海
TA贡献1811条经验 获得超5个赞
请阅读答案的第一行和/或英特尔的insn参考手册。 idiv ebx
做eax = (edx:eax)/ebx
和eax = (edx:eax)%ebx
。edx
始终是股息的高半部分,而显式操作数始终是除数。没有div
/ 形式idiv
会忽略edx
2和3操作数形式imul
仅产生单寄存器结果的方式。
- 3 回答
- 0 关注
- 545 浏览
添加回答
举报
0/150
提交
取消