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

时间:2010-04-11 01:14:52

标签: assembly x86 nasm

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

3 个答案:

答案 0 :(得分: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;
}

我会把NASM留给你。

答案 1 :(得分:3)

Shift and Add始终是在不涉及乘法指令的情况下在计算机上进行乘法的良好起点。

预先计算表是另一种可能适用于此问题的选项。

答案 2 :(得分:0)

有点迟到的答案。这是逻辑: - N的平方可以通过添加前N个奇数来获得。

在C中,

int sqr(int num){
    int j=1; 
    int sum=0;
    while(num>0){
        sum += j;
        j += 2; 
        num--;
    }
    return sum;
 }

但仅适用于整数。