计算机如何执行值相等比较?它是否从最小位开始逐位比较值,并在遇到两个不同的位时停止?还是从最高位开始?无论在何处/何时找到两个不同的位,它是否都会通过所有位?
答案 0 :(得分:5)
当您在更高级别的语言(例如c)中编写相等比较时,它将转换为中间表示,然后转换为特定平台的指令,此代码将在其上执行。编译器可以使用目标体系结构上的任何可用指令自由地实现相等性比较。这个想法通常是为了让它更快。
不同的架构具有不同的指令集。不同的处理器可以有不同的实现策略(再次使事情更快),只要它们符合规范。
以下是一些例子
CMP 命令用于比较两个值。以下是Instruction set reference的摘录。
比较第一个源操作数和第二个源操作数,并根据结果设置EFLAGS寄存器中的状态标志。 通过从第一个操作数中减去第二个操作数来执行比较,然后以与SUB指令相同的方式设置状态标志。当立即值用作操作数时,它将符号扩展为第一个操作数的长度。
这基本上意味着检查所有位。我想这是以允许不相等(<,>)比较的方式实现的。
所以检查所有位。在最简单的情况下,可以连续完成,但可以更快地完成。请参阅wikibooks on add / subtract blocks。
TEQ 命令可用于测试两个值是否相等。 以下是infocenter.arm.com
的摘录TEQ指令对Rn中的值和Operand2的值执行按位异或运算。这与EORS指令相同,只是它丢弃了结果。 使用TEQ指令测试两个值是否相等而不影响V或C标志。
再次检查所有位。