Assembly 是否有无分支实现数字逻辑功能的系统?

Assembly 是否有无分支实现数字逻辑功能的系统?,assembly,boolean-logic,bare-metal,Assembly,Boolean Logic,Bare Metal,我本来想问这个关于电气工程的问题,但我觉得这和编程更相关 通过数字逻辑,我们可以使用卡诺图或布尔代数将真值表简化为最小化函数。在CPU上,这些函数当然可以使用条件语句来表示,但是,我很好奇,如果可能的话,是否有一种标准的方法来实现它们,而不使用分支,只使用位操作 我不知道现在能做到这一点是不是很有趣,或者用今天的处理器它是否真的更高效。尽管如此,它在过去可能是相关的,并且无论如何都有兴趣知道 假设我有f=!a*b+!b*!c,或任何类似功能:是否有一个系统(如卡诺)可以通过使用额外寄存器、计算总

我本来想问这个关于电气工程的问题,但我觉得这和编程更相关

通过数字逻辑,我们可以使用卡诺图或布尔代数将真值表简化为最小化函数。在CPU上,这些函数当然可以使用条件语句来表示,但是,我很好奇,如果可能的话,是否有一种标准的方法来实现它们,而不使用分支,只使用位操作

我不知道现在能做到这一点是不是很有趣,或者用今天的处理器它是否真的更高效。尽管如此,它在过去可能是相关的,并且无论如何都有兴趣知道


假设我有
f=!a*b+!b*!c
,或任何类似功能:是否有一个系统(如卡诺)可以通过使用额外寄存器、计算总位、屏蔽等来找出是否有“智能”方法来避免分支?或者,如果你看到它,它只是你看到的东西,否则你看不到吗?

不确定这是否与你的问题有关,但ARM指令集对每条指令都有条件,因此对于某些if-then-else类型的序列,你实际上不必分支,您在指令上设置了正确的条件,这些条件贯穿整个管道。您可以选择一些序列,是的。例如,您可以做一些数学运算,对于一个条件,一个寄存器包含0,另一个寄存器包含1,然后计算两个结果if和else情况,然后将一个乘以它的寄存器,另一个乘以它的寄存器(只有两个中的一个包含一个),然后将结果a=aflag*aresult,b=bflag*bresult,result=a+b;aflag和bflag中只有一个是1,另一个是零,消除该结果。您可以使用and和all 1或all 0来消除其中一个条件。使用真值(查找)表的简单方法也是无分支的,尽管由于索引计算和内存访问的原因可能不是最佳的。在没有副作用的情况下,可以通过对结果进行muxing来合并分支两侧的结果。这是非常普遍的,但通常不是最好的做法。