在 NASM 汇编中对数字进行平方而不进行乘法

发布于 2024-08-28 14:01:14 字数 125 浏览 9 评论 0原文

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

Is it possible to square a number stored in a register (say eax) without doing any multiplication (by using shifts, etc)? I will be squaring a 16-bit number in 32-bit assembly so overflow shouldn't be an issue. I am using NASM x86 assembly to create the program. Thanks in advance for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

落花浅忆 2024-09-04 14:01:14

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

In C:

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

I'll leave the NASM to you.

病女 2024-09-04 14:01:14

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

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

Shift and Add is always a good starting point for doing multiplications on computers without involving multiplication instructions.

Precomputing a table is another option that could be suitable for this problem.

山有枢 2024-09-04 14:01:14

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

在 C 中,

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

但仅适用于整数。

A little late answer. Here is the logic:- The square of N can be obtained by adding first N odd numbers.

In C,

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

but applicable only for integers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文