在C++中,说:
uint64_t i;
uint64_t j;
Run Code Online (Sandbox Code Playgroud)
然后i * j将产生一个uint64_t值为i和之间的乘法的下半部分j,即(i * j) mod 2^64.现在,如果我想要乘法的较高部分怎么办?我知道在使用32位整数时,存在一个汇编指令做类似的事情,但我对汇编并不熟悉,所以我希望得到帮助.
制作以下内容的最有效方法是:
uint64_t k = mulhi(i, j);
Run Code Online (Sandbox Code Playgroud) 为什么idivx86汇编指令EDX:EAX被给定寄存器除(64位)而其他数学运算(包括乘法)只能在单个输入和输出寄存器上运行?
乘法:
mov eax, 3
imul eax, 5
Run Code Online (Sandbox Code Playgroud)
师:
mov edx, 0
mov eax, 15
mov ebx, 5
idiv ebx
Run Code Online (Sandbox Code Playgroud)
我知道这EDX用于存储余数,但为什么没有单独的指令用于此行为?这对我来说似乎不一致.