控制
条件码寄存器
条件码寄存器 | 描述 |
---|---|
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性能好