控制
条件码寄存器
| 条件码寄存器 | 描述 | 
|---|---|
| CF | 进位标志寄存器。最近的操作使最高位产生了进位,无符号操作溢出时为1 | 
| ZF | 零标志寄存器。最近的操作得出的结果是0时为1 | 
| SF | 符号标志寄存器。最近的操作得到的结果为负数时为1 | 
| OF | 溢出标志寄存器。最近的操作导致一个补码溢出时为1 | 
- 条件码寄存器大多数时候是被动改变
 
特殊的测试指令
cmp和test是唯二可以主动设置条件码寄存器的指令
cmp S1,S2:基于S1-S2的值来设置条件码
test S2,S1:基于S2&S1去设置条件码
二者都需加数据格式后缀
访问条件码寄存器
- 根据条件码组合,将一个字节设置为0,1
 - 条件跳转到程序的某个其他部分
 - 有条件的传送数据
 
第一种是直接读取条件码寄存器的值,二三种是直接使用,不会显示的读取条件码寄存器的值
SET指令
将条件码组合的值设置到指定的目的操作数,目的操作数只能是单字节的寄存器或储存器中单字节的位置

跳转指令
直接将程序跳转到指定位置,或者根据条件码寄存器的组合进行条件跳转。除了第一个jmp直接跳转指令以及第二个jmp间接跳转指令之外,剩下的12个都是条件跳转指令。

总的来说,跳转指令包含给出一个偏移量和给出绝对地址两种
流程控制
c代码(随便写的)
1  | int jmp(int a,int b)  | 
汇编代码:
1  | .file "t.c"  | 
cmov指令
满足条件的时候进行传送,与set比较像

条件传送指令相当于if-else的赋值判断,一般情况下,比if-else性能好
