-1
据我了解,imul
的输出是edx:eax
,这意味着imul
应覆盖edx
。然而,我刚碰到一个问题,其中imul在什么情况下写入edx?
imul eax, 10
未清除edx
。
在什么情况下imul
写信给edx
?我查了多个x86文档网站,他们似乎都有冲突的信息。
据我了解,imul
的输出是edx:eax
,这意味着imul
应覆盖edx
。然而,我刚碰到一个问题,其中imul在什么情况下写入edx?
imul eax, 10
未清除edx
。
在什么情况下imul
写信给edx
?我查了多个x86文档网站,他们似乎都有冲突的信息。
只有imul
指令的单操作数形式写入EDX:EAX
对。两个和三个操作数形式截断结果。
如果你写
mov ecx, 10
imul ecx
然后EAX
将由10相乘,并EDX
将被覆盖。
你应该检查的唯一东西是官方的intel指令集参考。它不冲突并且是权威的。 TL; DR:只有单一操作数版本隐式使用'edx':'eax'。 – Jester
如果不使用Intel参考,请参阅http://x86.renejeschke.de/上的第三方参考。对于386也是非常好的。它也表明只有单一操作数形式写入EDX:EAX –