在没有乘法的情况下在NASM装配中平方数字

Vol*_*tin 3 x86 assembly nasm

是否可以对存储在寄存器(例如eax)中的数字进行平方而不进行任何乘法(通过使用移位等)?我将在32位汇编中设置一个16位数字,因此溢出应该不是问题.我正在使用NASM x86程序集来创建程序.在此先感谢您的帮助.

Mar*_*tos 5

在C:

int square(int n) {
    int i, r = 0;
    for (i = n; i; i >>= 1, n <<= 1)
        if (i & 1)
            r += n;
    return r;
}
Run Code Online (Sandbox Code Playgroud)

我会把NASM留给你.