在Linux中不使用乘法运算符的情况下,两个整数乘积的汇编代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux中不使用乘法运算符的情况下,两个整数乘积的汇编代码相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个汇编代码,该代码可以在不使用乘法运算符的情况下从键盘计算两个整数的乘积。我完全被困住了,我是汇编语言和Linux / C的新手,所以请多多指教。

答案

您要使用移位和加法执行此操作。

让我们说您要乘以3 * 3,并且我们有一个4位寄存器。

二进制:0011 * 0011

如果遇到1,我们将向右移找到1的索引的值;如果我们为零,则不执行任何操作:

0011

首先我们在位置0处有1,所以我们将数字添加到一个空寄存器中而不会发生移位:到目前为止,我们有0011

然后我们在位置1处又有了一个1,我们将原始数字0110移到了先前的值0011上

0011 + 0110 => 1001 ; since we have all 0's after we are done

您需要遍历将要相乘的值之一的位,并且每当您有一个1时,将应用一个与其位置相对应的移位。

以上是关于在Linux中不使用乘法运算符的情况下,两个整数乘积的汇编代码的主要内容,如果未能解决你的问题,请参考以下文章

在java中不使用乘法,除法和mod运算符来除以两个整数

c语言如何实现两个整数的乘法运算?

是否可以在没有 SSE4 的情况下在 VC++ 中向量化乘法?

认识数学各个分支

[位运算] 64位整数乘法(mod 一个数)

位运算 - 六十四位整数乘法