【发布时间】:2012-10-11 06:09:44
【问题描述】:
在 C 中,与许多其他语言一样,有 if 语句。您可以在编写其他语言(如 C++ 或 Ruby)时使用该逻辑。但是,最底层的if 语句是如何工作的呢?
条件如何在最低级别发挥作用?我不明白如何以非递归方式定义它。
【问题讨论】:
标签: c assembly if-statement logic
在 C 中,与许多其他语言一样,有 if 语句。您可以在编写其他语言(如 C++ 或 Ruby)时使用该逻辑。但是,最底层的if 语句是如何工作的呢?
条件如何在最低级别发挥作用?我不明白如何以非递归方式定义它。
【问题讨论】:
标签: c assembly if-statement logic
您总是可以查看生成的程序集,但它通常以分支或跳转指令的形式实现。
if ( x == y )
001E149C mov eax,dword ptr [x]
001E149F cmp eax,dword ptr [y]
001E14A2 jne wmain+3Ah (1E14AAh)
return 0;
001E14A4 xor eax,eax
001E14A6 jmp wmain+3Fh (1E14AFh)
else
001E14A8 jmp wmain+3Fh (1E14AFh)
return 1;
001E14AA mov eax,1
if 基本上是jne(跳转不等于)指令。如果两个值(x和y)不相等,则跳转到else,否则继续执行并跳出if。
【讨论】:
cmp机器指令。 jne 机器指令在不相等时跳转(即,如果标志表明之前的 cmp 测试了两个不相等的单词)。
在最低级别,它们是在物理硬件中实现的。它们不是用其他东西来定义的,它们实际上是物理实现的。
【讨论】:
1 的值。然后呢?
1 连接到一个实际的硬件,如果它得到一个连接到它的 1,它会在程序计数器寄存器中存储一个地址,如果它得到其他东西一个0 连接到它。 1 实际上操作了一个物理开关,该开关决定了接下来要执行的指令。
CONDITION_F/F,就在那里的右下方,以及它下面的电路计算 1。 4004 是第一个 CPU。