4_读取条件码指令-2

读取条件码指令-2

SetX 系列指令实例

  • SetX 指令

就是读取当前条件码 (或者某些条件码的组合), 并存入目的字节寄存器, 它只存入一个 byte, 余下的 3 个字节不会被修改

这个时候你可能把一个寄存器最低的字节改掉了, 那么余下的高的三个字节, 一般情况下我们会用 movzbl 指令对目的寄存器高位做一个 0 扩展

int gt(int x, int y)
{
    return x > y;
}

这个函数很简单, gt 给它两个参数 x y, 如果 x > y 就返回一个 1, 否则返回 0.

我们把它 gcc 编译下 :

我们只保留主体部分代码

movl 12(%ebp), %eax ; eax = y
cmpl %eax, 8(%ebp)  ; Compare x : y
setg %al    ; al = x > y
movzbl %al, %eax    ; Zero rest of %eax
; (movsbl), 这个是符号扩展, 在这里面不合适

把比较的结果, 这个结果也就是条件标志位的值, 提取出来