【发布时间】:2017-08-12 03:13:16
【问题描述】:
当使用“or”而不是“cmp”时,是否有重要的积极意义?
考虑这个函数序言:
push ebp
mov ebp,esp
push ebx
xor eax,eax ;error return code
mov ecx,[ebp +8] ;first integer arg after return addr.
mov edx,[ebp +12] ;second integer argument
该函数应计算a / b或a % b。
首先我需要检查一个 0 除数。
我的直觉是组装
cmp edx,0
je InvalidDivisor
但是当我查看有关汇编程序的高级书籍时,会使用这个:
or edx,edx
jz InvalidDivisor
我的问题是为什么第二种解决方案“更正确”?
计算或运算并检查零标志是否比仅比较两个值需要更长的时间?
这只是更高级的编码风格的问题吗?
【问题讨论】:
-
它们具有相同的延迟和吞吐量,但
or形式更小,因为不需要将立即数编码到机器代码中。 -
这个已经问了好几次了,需要找到重复的链接...