我有两个32位有符号整数EAX和EBX分别.如果我做:
xor EDX, EDX
idiv EBX
Run Code Online (Sandbox Code Playgroud)
然后,EAX被视为无符号32位,这是错误的.MOVSX似乎无法将唱歌点扩展EAX到EDX:EAX.我也试着玩CMP和SBC,但我没能找到解决的办法.
我想知道最短的代码,或者至少是避免跳转的代码.
它没有被转换.idiv是有符号的divison,它将64位值edx:eax除以操作数idiv,将余数放在edx和eax.我想不出比这更快的方法.如果您真的认为它会以某种方式转换,请尝试使用该CDQ指令.它执行以下操作:
将EAX扩展到EDX,形成四字EDX:EAX.由于(I)DIV使用EDX:EAX作为输入,如果在(I)DIV之前未手动初始化EDX(如在64/32分区中),则必须在设置EAX后调用CDQ.