我一直在尝试很好地掌握x86汇编语言,并且想知道是否有movl $1, %eax的快速缩写。从那时起,我认为列出该语言中经常使用的成语也许是个好主意。

这可能包括首选使用xorl %eax, %eax而不是movl $0, %eaxtestl %eax, %eax反对cmpl $0, %eax

哦,请为每个帖子举一个例子!

最佳答案

这是另一个有趣的“成语”。希望每个人都知道,即​​使与乘法相比,除法也是一个大的时间消耗。使用一点数学,就可以乘以常数的倒数而不是除以常数。这超出了shr技巧。例如,除以5:

mov eax, some_number
mov ebx, 3435973837    // 32-bit inverse of 5
mul ebx


现在,eax已被除以5,而未使用慢div操作码。这是有用的常量列表,用于从http://blogs.msdn.com/devdev/archive/2005/12/12/502980.aspx中窃取的无耻除法

3   2863311531
5   3435973837
7   3067833783
9   954437177
11  3123612579
13  3303820997
15  4008636143
17  4042322161


对于不在列表中的数字,您可能需要事先进行移位(除以6,shr 1,然后乘以3的倒数)。

关于assembly - x86汇编成语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2647640/

10-12 22:52