如何在程序中执行值相等比较?

Mån*_*son 5 comparison

计算机如何执行值相等比较?它是否从最小位开始逐位比较值,并在遇到两个不同的位时停止?还是从最高位开始?无论何时/何时发现两个不同的位,它是否都会通过所有位?

Iva*_*van 5

当您在更高级别的语言(例如c)中编写相等比较时,它将转换为中间表示,然后转换为特定平台的指令,此代码将在其上执行.编译器可以使用目标体系结构上的任何可用指令自由地实现相等性比较.这个想法通常是为了让它更快.

不同的体系结构具有不同的指令集.只要符合规范,不同的处理器就可以有不同的实现策略(再次使事情变得更快).

以下是一些例子

86

CMP命令用于比较两个值.以下是指令集参考的摘录.

比较第一个源操作数和第二个源操作数,并根据结果设置EFLAGS寄存器中的状态标志.通过从第一个操作数中减去第二个操作数,然后以与SUB指令相同的方式设置状态标志来执行比较.当立即值用作操作数时,它将符号扩展为第一个操作数的长度.

这基本上意味着检查所有位.我想它的实现方式也允许非相等(<,>)比较.

所以检查所有位.在最简单的情况下,可以连续完成,但可以更快地完成.有关加/减块的信息,请参阅wikibooks.

使用进位前瞻添加块方案

TEQ命令可用于测试两个值是否相等.以下是infocenter.arm.com的摘录

TEQ指令对Rn中的值和Operand2的值执行按位异或运算.这与EORS指令相同,只是它丢弃了结果.使用TEQ指令测试两个值是否相等而不影响V或C标志.

再次检查所有位.