在 NASM 汇编中对数字进行平方而不进行乘法
是否可以在不进行任何乘法(通过使用移位等)的情况下对存储在寄存器(例如 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
C:
我会把 NASM 留给你。
In C:
I'll leave the NASM to you.
移位和加法始终是在计算机上进行乘法而不涉及乘法指令的良好起点。
预计算表是适合此问题的另一种选择。
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.
回答有点晚了。逻辑如下:- N 的平方可以通过添加前 N 个奇数来获得。
在 C 中,
但仅适用于整数。
A little late answer. Here is the logic:- The square of N can be obtained by adding first N odd numbers.
In C,
but applicable only for integers.