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