如何反转符号扩展?

Vay*_*yun 0 assembly x86-64 att

我用 将两个数字相乘imulq。它在 上返回一个有符号的数字rdx:rax。我想把它压缩到rax寄存器中。基本上,我正在寻找反转cqo.

prl*_*prl 6

如果结果适合 64 位,则 rax 已包含 64 位结果,您无需执行任何操作即可将结果放入 rax 寄存器。但是,如果您只需要一个 64 位结果,那么您应该使用指令的双操作数形式,imul rax, <src>,它更快,因为它不必计算完整的 128 位结果。

如果要处理溢出错误,请jo <error-handler>在乘法之后使用以检查不适合 64 位的结果。这适用于生成 128 位结果的 imul 的单操作数形式,以及生成 64 位结果的二或三操作数形式。但是,如果即使发生溢出也打算丢弃高 64 位,则没有理由使用这种形式的指令。