gpt4 book ai didi

汇编语言使用 shl 乘以奇数?

转载 作者:行者123 更新时间:2023-12-02 22:16:21 26 4
gpt4 key购买 nike

我需要将 EAX 乘以 37,我知道我可以使用 shl eax,5shl register,2 然后将寄存器添加到 eax 来乘以 38,但我不确定乘以奇数的代码,我只能使用 shl add 和 mov 。谢谢!

最佳答案

使用 LEA,您可以直接乘以许多小的奇数常数 (2,4,8,3,5,9),以及添加两个寄存器并将答案移到不同的位置。这非常有用。通过组合这些,您可以使用 LEA 指令序列(通常非常短)乘以几乎任何小常数。明智地使用其他 ADD、SHL 和 SUB(包括 NEG 然后 ADD)指令可以缩短这些序列。如此短的序列几乎总是比使用乘法更快,部分原因是许多指令在当前处理器的执行中重叠:

将 eax 乘以 37:

 lea ecx, [eax+8*eax] ; 9 * eax
lea eax, [ecx*4+eax] ; 37 * eax

将 eax 乘以 38:

 lea ecx, [8*eax]
neg eax
lea ecx, [5*ecx]
lea eax, [ecx+2*eax]

更好:

 lea ecx, [8*eax+eax] ; 9 * eax
lea ecx, [4*ecx] ; 36 * eax
lea eax, [eax*2+ecx] ; 38 * eax

只是为了好玩,乘以 103:

 lea ecx, [8*eax] ; 8 * eax
lea ecx, [ecx*4] ; 32 * eax
lea ecx, [ecx*2+ecx] ; 96 * eax
lea ecx, [ecx+8*eax]; ; 104 * eax
sub ecx, eax ; 103 * eax

关于汇编语言使用 shl 乘以奇数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com