Performance x86跳转指令如何检查各自的标志?

Performance x86跳转指令如何检查各自的标志?,performance,assembly,x86,intel,Performance,Assembly,X86,Intel,据我所知,条件跳转检查CMP指令后设置的标志的状态。例如: CMP AX,DX ; Set compare flags JGE DONE ; Go to DONE label if AX >= DX ... DONE: ... 在这种情况下,如何实际检查标志?如果我没有弄错的话,这些标志是特殊寄存器中的单个位;那么,是一次检查一个位,还是一次检查全部位?在C伪代码中: unsigned flags=0;/*重置所有标志*/ /*定义标志*/ const un

据我所知,条件跳转检查
CMP
指令后设置的标志的状态。例如:

CMP     AX,DX    ; Set compare flags
JGE     DONE     ; Go to DONE label if AX >= DX
...
DONE:
...
在这种情况下,如何实际检查标志?如果我没有弄错的话,这些标志是特殊寄存器中的单个位;那么,是一次检查一个位,还是一次检查全部位?在C伪代码中:

unsigned flags=0;/*重置所有标志*/
/*定义标志*/
const unsigned GREATER=1这取决于机器的构造方式

让我给你们看一个PDF,一个特别简单的计算机示例。 请看第115张幻灯片,他展示了指令是如何处理的。 基本上,有一大块组合逻辑实现了一个有限状态机,它控制每个指令的执行方式。 FSM中的大多数步进都与使用地址和数据总线在寄存器之间移动数据和地址有关

如果你想知道什么是组合逻辑,它是一个blob,有一组布尔输入和一组布尔输出,每个输出都是一些输入的布尔函数。这个斑点没有记忆。它获取内存的方式是将一些输出反馈给输入


所以为了回答你的问题,在这台计算机的上下文中,它可能同时测试所有的条件位,用一个布尔表达式。

好吧,它的实际功能将隐藏在x86内核的电路中。它不像程序语言那样工作。可能更像是一种状态语言,如VHDL。实际上在x86内核上工作过的人可能会准确地告诉你。由于位与组合逻辑并行输入,这是否意味着通过组合逻辑的每一组位都会产生相同的理论延迟,而不管每个位的值如何?@VilhelmGray:对,因为在组合逻辑中花费的时间仅受逻辑表达式的深度和继电器的点击速度的限制。例如,时钟通常在两个阶段工作,在阶段0开始时,组合逻辑的输入被假定为有效,在阶段0结束时,输出被假定为有效。组合逻辑中的延迟很可能与输入有关(例如,“或”如果两个输入都是高的,而不是只有一个输入,则门可能会更快地切换到低-高)。然而,如果机器被设计为可靠的,则整体操作的延迟是构成组合逻辑的同步逻辑的延迟,即,组合路径的结果在时钟边缘采样之前不被“使用”,该时钟边缘被配置为在最坏情况组合延迟之后才发生。