3

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

4

3 回答 3

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 留给你。

于 2010-04-11T01:36:04.033 回答
3

在不涉及乘法指令的情况下,移位和加法始终是在计算机上进行乘法运算的良好起点。

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

于 2010-04-11T01:31:24.590 回答
0

有点晚的答案。逻辑如下: - N 的平方可以通过添加前 N 个奇数来获得。

在 C 中,

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

但仅适用于整数。

于 2013-08-26T15:30:45.503 回答