分割2个32位有符号整数的最短方法是什么?

ssh*_*sky 1 x86 assembly

我有两个32位有符号整数EAXEBX分别.如果我做:

xor EDX, EDX
idiv EBX
Run Code Online (Sandbox Code Playgroud)

然后,EAX被视为无符号32位,这是错误的.MOVSX似乎无法将唱歌点扩展EAXEDX:EAX.我也试着玩CMPSBC,但我没能找到解决的办法.

我想知道最短的代码,或者至少是避免跳转的代码.

Lev*_*usa 5

它没有被转换.idiv是有符号的divison,它将64位值edx:eax除以操作数idiv,将余数放在edxeax.我想不出比这更快的方法.如果您真的认为它会以某种方式转换,请尝试使用该CDQ指令.它执行以下操作:

将EAX扩展到EDX,形成四字EDX:EAX.由于(I)DIV使用EDX:EAX作为输入,如果在(I)DIV之前未手动初始化EDX(如在64/32分区中),则必须在设置EAX后调用CDQ.