进位标志比较,何时设置进位标志?

时间:2018-09-11 00:38:27

标签: assembly x86 att

汇编器具有以下代码:

sub$0x22,%eax # %eax = %eax - 22
cmp$0x7,%eax  # %eax > 7 then jump *this is where I have trouble*
ja some address # jump if C = 1 or Z = 1

我的目标是不跳。 我已经尝试过%eax = 30、14、28、16、0、22

的情况

问题: 我不明白为什么在我尝试过的所有情况下c = 0和z = 0。

1 个答案:

答案 0 :(得分:1)

add_filter( 'woocommerce_countries', 'change_country_order_in_checkout_form' ); function change_country_order_in_checkout_form($countries) { $usa = $countries['US']; // Store the data for "US" key unset($countries["US"]); // Remove "US" entry from the array // Return "US" first in the countries array return array('US' => $usa ) + $countries; } (十进制为34)大于所有这些示例eax值(假设它们为十进制)。因此,相减的结果为负。但是“负”整数只是一个最高有效位为1的整数,也可以解释为一个较大的无符号数。

从概念上而不是标志上的实际逻辑上考虑0x22可能更容易。 (see this answer)您可以将ja视为无符号比较。因此,这些负数看起来像是大于7的真正大数。如果您改用ja指令,则其行为应与预期的一样。可以将其视为经过签名的比较。