2_比较指令与测试指令

比较指令与测试指令

比较 (Compare) 指令

cmpl Src2, Src1; cmpq Src2, Src1

两个数相比较, 这个比较实际上是做了一个减法 : cmpl b, a 类似于计算 a - b, 但是它不改变目的操作数.

CF set (if carry out from most significant bit)

  • 可用于无符号数的比较

如果 a == b, ZF = 1

ZF set (if a == 0)

如果 (a - b) < 0, SF = 1, 这实际上把它作为带符号数来处理了

SF set (if (a-b)<0)

如果把它作为带符号数来处理, 那么一个正数减去负数, 或者说负数减去正数, 有可能产生溢出. 那么这种情况下呢, 就把 OF 位设置为 1.

OF set (if two's complement overflow)

如果两个数相减的话, 最高位有借位就设置为 1.

测试 (Test) 指令

testl Src2, Src1

testq Src2, Src1

计算 Src1 & Src2, 并设置相应的条件码, 但是不改变目的操作数

ZF set (if a& b == 0)

SF set (if a&b < 0)

test 指令使 CF, OF 清零