我一直在尝试很好地掌握x86汇编语言,并且想知道是否有movl $1, %eax
的快速缩写。从那时起,我认为列出该语言中经常使用的成语也许是个好主意。
这可能包括首选使用xorl %eax, %eax
而不是movl $0, %eax
或testl %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/