Assembly 左移位乘法组件

Assembly 左移位乘法组件,assembly,compilation,Assembly,Compilation,我目前正试图了解如何在装配中通过左移倍增,从而解决一些任务。 我被要求将一些计算重写为不使用mul或div 例如: mul $2, %eax 我的答覆是: sal $1, %eax 我知道向左移动一次,这个问题就解决了。 但另一个例子是 mul $3, %eax 及 我该如何解决这个问题?据我所知,这有点像将其拆分,然后以某种方式将其添加到一起 有人吗?谢谢 您需要通过加法和移位运算来分解乘法,例如 x*3==x*2+x 然后它就变得微不足道了 mov %eax, %ebx # tmp

我目前正试图了解如何在装配中通过左移倍增,从而解决一些任务。 我被要求将一些计算重写为不使用
mul
div

例如:

mul $2, %eax
我的答覆是:

sal $1, %eax
我知道向左移动一次,这个问题就解决了。 但另一个例子是

mul $3, %eax 

我该如何解决这个问题?据我所知,这有点像将其拆分,然后以某种方式将其添加到一起


有人吗?谢谢

您需要通过加法和移位运算来分解乘法,例如

x*3==x*2+x

然后它就变得微不足道了

mov %eax, %ebx # tmp = eax
sal $1, %eax # eax <<= 1
add %ebx, %eax # eax += tmp
mov%eax,%ebx#tmp=eax

sal$1,%eax#eax您需要通过加法和移位运算来分解乘法,例如

x*3==x*2+x

然后它就变得微不足道了

mov %eax, %ebx # tmp = eax
sal $1, %eax # eax <<= 1
add %ebx, %eax # eax += tmp
mov%eax,%ebx#tmp=eax

sal$1,%eax#eax通过移位,您只能乘/除
2的幂

x * (2^n) = x << n
x / (2^n) = x >> n
二进制表示将是

y = 1100
现在,在以下位置进行操作:
2、3
(从右侧的
0
开始)。意思是

y = 2^2 + 2^3.
现在,要将
x
乘以
y
,只需:

x * y = x * (2^2) +  x * (2^3) = (x << 2) + (x << 3)

x*y=x*(2^2)+x*(2^3)=(x通过移位,您只能乘/除
2的幂

x * (2^n) = x << n
x / (2^n) = x >> n
二进制表示将是

y = 1100
现在,在下面的位置上选择:
2,3
(从右侧的
0
开始)。这意味着

y = 2^2 + 2^3.
现在,要将
x
乘以
y
,只需:

x * y = x * (2^2) +  x * (2^3) = (x << 2) + (x << 3)

x*y=x*(2^2)+x*(2^3)=(x这个问题最近才被问到和回答

从小学起我们就知道了

n * 3 = n * (2 + 1) = n * ((2^1) + (2^0)) = (n*(2^1)) + (n*(2^0)) 
然后你就可以进行换档了

(n<<1)+(n<<0)
(其中n、m、o.p为单个位)带小数(小学)取底部的数字乘以整个顶部,每10次方将其移位一列,二进制相同,但对于基数2,您只有两个选择乘0或乘1,因此要么不加任何内容,要么将移位的数字乘以正确的列数

无论哪种方式,结果都是一样的,选择一个操作数,对于一个二进制位,将另一个操作数移位那么多位,然后相加


除法是一种完全不同的野兽,你可以右移以二的幂除法,但它的分布方式不同n/5!=n/4+n/1。获取黑客的喜悦书,了解一些技巧。还要注意,如果它是二的幂,那么它通常只适用于无符号数,有符号数通常会从le中移入零ft,而不是符号位的重复。在某些体系结构上的汇编中,存在算术右移和逻辑右移,逻辑经常在零处移位,这是高级语言经常使用的移位,算术理想地重复符号位。允许您使用右移作为符号位的两个除数的幂(但不一定没有签名)

这个问题最近才被问到并得到了回答

从小学起我们就知道了

n * 3 = n * (2 + 1) = n * ((2^1) + (2^0)) = (n*(2^1)) + (n*(2^0)) 
然后你就可以进行换档了

(n<<1)+(n<<0)
(其中n、m、o.p为单个位)带小数(小学)取底部的数字乘以整个顶部,每10次方将其移位一列,二进制相同,但对于基数2,您只有两个选择乘0或乘1,因此要么不加任何内容,要么将移位的数字乘以正确的列数

无论哪种方式,结果都是一样的,选择一个操作数,对于一个二进制位,将另一个操作数移位那么多位,然后相加

除法是一种完全不同的野兽,你可以右移以二的幂除法,但它的分布方式不同n/5!=n/4+n/1。获取黑客的喜悦书,了解一些技巧。还要注意,如果它是二的幂,那么它通常只适用于无符号数,有符号数通常会从le中移入零ft,而不是符号位的重复。在某些体系结构上的汇编中,存在算术右移和逻辑右移,逻辑经常在零处移位,这是高级语言经常使用的移位,算术理想地重复符号位。允许您使用右移作为符号位的两个除数的幂(但不一定没有签名)