Assembly 为什么可以';我们不能通过编程语言使用一个量级比较器吗?

Assembly 为什么可以';我们不能通过编程语言使用一个量级比较器吗?,assembly,low-level,circuit,Assembly,Low Level,Circuit,我刚刚了解了幅度比较器电路。MC将通过三个位来判断: m < n m = n m > n mn 到目前为止,我还没有遇到一种编程语言,可以提供这样的操作。我也记不起这方面的汇编语句了。如果电路仍然存在,是否有任何特定的理由不向编程语言提供这种功能?编程语言中也有类似的例子,例如C中的strcmp()和strcoll()和memcmp()返回小于、等于或大于零的数字,根据它们的参数排序的顺序 类似地,在Perl中,和cmp运算符返回-1、0或1,这同样取决于哪个操作数更大(对于,用

我刚刚了解了幅度比较器电路。MC将通过三个位来判断:

m < n
m = n
m > n
mn

到目前为止,我还没有遇到一种编程语言,可以提供这样的操作。我也记不起这方面的汇编语句了。如果电路仍然存在,是否有任何特定的理由不向编程语言提供这种功能?

编程语言中也有类似的例子,例如C中的
strcmp()
strcoll()
memcmp()
返回小于、等于或大于零的数字,根据它们的参数排序的顺序

类似地,在Perl中,
cmp
运算符返回-1、0或1,这同样取决于哪个操作数更大(对于
,用数字表示,
cmp
的字符串比较)

当然,这些都不会产生三个独立的位。(只有三个选项,两位就足够了。)一个数字返回值通过只测试
>=0
的输出,使“大于或等于”测试变得更容易。大多数程序主要处理数字,语言和处理器使其变得简单,因此数字返回并非无效,单个位的输出可能看起来不合适


(当然,我们可以用返回值4、2和1定义这样一个比较函数,然后让程序员使用符号常量或特殊测试函数将其转换为人类可以理解的术语。)

如果没有汇编指令,软件就无法使用它。普通CPU甚至包括这些设备吗?在CPU中,这些信息传统上是作为ALU中基本加法/减法运算的副作用产生的。通常通过比较指令执行,该指令实际上是对状态位求值的减法,而不是存储结果。通常,标志状态寄存器将算术关系编码为零(相等)和进位/借位标志位(可能还有有符号溢出标志)的组合,尽管有些体系结构不显式存储标志,一次只计算一个条件。我也要提到这一点——例如,在x86上,减法或比较指令后,如果数字相等,则设置零标志,如果第二个数字较大,则设置进位标志。如果两个标志都清除,则第一个数字较大。在内部,这些标志可能由幅度比较器的输出设置。